This commit is contained in:
Kieran 2023-07-18 16:14:38 +01:00
parent d41b485eb2
commit 06b9dba09b
Signed by: Kieran
GPG Key ID: DE71CEB3925BE941
28 changed files with 522 additions and 503 deletions

View File

@ -1,4 +0,0 @@
{
"presets": ["@babel/preset-env", "@babel/preset-react"],
"plugins": [["formatjs"]]
}

View File

@ -30,15 +30,7 @@ declare module "translations/*.json" {
export default value;
}
type EmojiShape = {
[key: string]: {
keywords: Array<string>;
char: string;
fitzpatrick_scale: boolean;
category: string;
};
};
declare module "emojilib" {
const lib: EmojiShape;
const value: Record<string, Array<string>>;
export default value;
}

View File

@ -19,14 +19,13 @@
"dexie": "^3.2.4",
"dns-over-http-resolver": "^2.1.1",
"emojilib": "^3.0.10",
"hls.js": "^1.4.6",
"light-bolt11-decoder": "^2.1.0",
"match-sorter": "^6.3.1",
"qr-code-styling": "^1.6.0-rc.1",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-intersection-observer": "^9.4.1",
"react-intl": "^6.2.8",
"react-intl": "^6.4.4",
"react-redux": "^8.0.5",
"react-router-dom": "^6.5.0",
"react-textarea-autosize": "^8.4.0",
@ -38,8 +37,8 @@
"workbox-strategies": "^6.4.2"
},
"scripts": {
"start": "webpack serve --node-env=development",
"build": "webpack --node-env=production",
"start": "webpack serve --node-env=development --mode=development",
"build": "webpack --node-env=production --mode=production",
"test": "jest --runInBand",
"intl-extract": "formatjs extract 'src/**/*.ts*' --ignore='**/*.d.ts' --out-file src/lang.json --flatten true",
"intl-compile": "formatjs compile src/lang.json --out-file src/translations/en.json",
@ -71,9 +70,9 @@
"@babel/plugin-syntax-import-assertions": "^7.20.0",
"@babel/preset-env": "^7.21.5",
"@babel/preset-react": "^7.18.6",
"@babel/preset-typescript": "^7.22.5",
"@babel/runtime": "^7.22.6",
"@formatjs/cli": "^6.0.1",
"@formatjs/ts-transformer": "^3.13.1",
"@jest/globals": "^29.6.1",
"@types/debug": "^4.1.8",
"@types/jest": "^29.5.1",
@ -83,6 +82,8 @@
"@types/uuid": "^9.0.2",
"@types/webscopeio__react-textarea-autocomplete": "^4.7.2",
"@types/webtorrent": "^0.109.3",
"@typescript-eslint/eslint-plugin": "^6.1.0",
"@typescript-eslint/parser": "^6.1.0",
"@webbtc/webln-types": "^1.0.10",
"@webpack-cli/generators": "^3.0.4",
"@webscopeio/react-textarea-autocomplete": "^4.9.2",
@ -103,9 +104,9 @@
"mini-css-extract-plugin": "^2.7.5",
"prettier": "2.8.3",
"prop-types": "^15.8.1",
"source-map-loader": "^4.0.1",
"terser-webpack-plugin": "^5.3.9",
"ts-jest": "^29.1.0",
"ts-loader": "^9.4.2",
"typescript": "^5.1.6",
"webpack": "^5.82.1",
"webpack-bundle-analyzer": "^4.8.0",

View File

@ -1,5 +1,5 @@
.link-preview-container {
border-radius: 0px 0px 12px 12px;
border-radius: 12px;
background: #151515;
overflow: hidden;
}
@ -14,11 +14,26 @@
.link-preview-title {
padding: 0 10px 10px 10px;
line-height: 21px;
}
.link-preview-title > h1 {
padding: 0;
font-size: 16px;
font-weight: 700;
}
.link-preview-container:hover .link-preview-title > h1 {
color: var(--highlight);
}
.link-preview-title > small {
color: var(--font-secondary-color);
font-size: small;
font-size: 14px;
}
.link-preview-title > small.host {
font-size: 12px;
}
.link-preview-image {
@ -30,3 +45,7 @@
background-size: cover;
background-position: center;
}
.light .link-preview-container {
background: #ddd;
}

View File

@ -73,15 +73,12 @@ const LinkPreview = ({ url }: { url: string }) => {
{preview && (
<a href={url} onClick={e => e.stopPropagation()} target="_blank" rel="noreferrer" className="ext">
{previewElement()}
<p className="link-preview-title">
{preview?.title}
{preview?.description && (
<>
<br />
<small>{preview.description.slice(0, 160)}</small>
</>
)}
</p>
<div className="link-preview-title">
<h1>{preview?.title}</h1>
{preview?.description && <small>{preview.description.slice(0, 160)}</small>}
<br />
<small className="host">{new URL(url).host}</small>
</div>
</a>
)}
{!preview && <Spinner className="f-center" />}

View File

@ -1,47 +0,0 @@
.live-chat {
height: calc(100vh - 100px);
display: flex;
flex-direction: column;
}
.live-chat > div:nth-child(1) {
font-size: 24px;
line-height: 29px;
font-weight: bold;
}
.live-chat > div:nth-child(2) {
flex-grow: 1;
display: flex;
gap: 16px;
flex-direction: column-reverse;
margin-block-end: 20px;
overflow-y: auto;
}
.live-chat > div:nth-child(3) {
display: flex;
gap: 10px;
}
.live-chat .message {
display: inline-flex;
align-items: center;
gap: 8px;
}
.live-chat .message .name {
display: inline-flex;
align-items: center;
color: var(--highlight);
font-weight: 600;
cursor: pointer;
user-select: none;
}
.live-chat .message .avatar {
width: 24px;
height: 24px;
display: inline-block;
margin-right: 8px;
}

View File

@ -1,92 +0,0 @@
import "./LiveChat.css";
import { EventKind, NostrLink, TaggedNostrEvent } from "@snort/system";
import { useUserProfile } from "@snort/system-react";
import { useState } from "react";
import { useNavigate } from "react-router-dom";
import { FormattedMessage, useIntl } from "react-intl";
import Textarea from "Element/Textarea";
import { useLiveChatFeed } from "Feed/LiveChatFeed";
import useEventPublisher from "Feed/EventPublisher";
import { getDisplayName } from "Element/ProfileImage";
import Avatar from "Element/Avatar";
import AsyncButton from "Element/AsyncButton";
import Text from "Element/Text";
import { System } from "index";
import { profileLink } from "SnortUtils";
export function LiveChat({ ev, link }: { ev: TaggedNostrEvent; link: NostrLink }) {
const [chat, setChat] = useState("");
const messages = useLiveChatFeed(link);
const pub = useEventPublisher();
const { formatMessage } = useIntl();
async function sendChatMessage() {
if (chat.length > 1) {
const reply = await pub?.generic(eb => {
return eb
.kind(1311 as EventKind)
.content(chat)
.tag(["a", `${link.kind}:${link.author}:${link.id}`])
.processContent();
});
if (reply) {
console.debug(reply);
System.BroadcastEvent(reply);
}
setChat("");
}
}
return (
<div className="live-chat">
<div>
<FormattedMessage defaultMessage="Stream Chat" />
</div>
<div>
{[...(messages.data ?? [])]
.sort((a, b) => b.created_at - a.created_at)
.map(a => (
<ChatMessage ev={a} key={a.id} />
))}
</div>
<div>
<Textarea
autoFocus={false}
className=""
onChange={v => setChat(v.target.value)}
value={chat}
onFocus={() => {}}
placeholder={formatMessage({
defaultMessage: "Message...",
})}
onKeyDown={async e => {
if (e.code === "Enter") {
e.preventDefault();
await sendChatMessage();
}
}}
/>
<AsyncButton onClick={sendChatMessage}>
<FormattedMessage defaultMessage="Send" />
</AsyncButton>
</div>
</div>
);
}
function ChatMessage({ ev }: { ev: TaggedNostrEvent }) {
const profile = useUserProfile(System, ev.pubkey);
const navigate = useNavigate();
return (
<div className="message">
<div className="name" onClick={() => navigate(profileLink(ev.pubkey, ev.relays))}>
<Avatar user={profile} />
{getDisplayName(profile, ev.pubkey)}:
</div>
<span>
<Text disableMedia={true} content={ev.content} creator={ev.pubkey} tags={ev.tags} />
</span>
</div>
);
}

View File

@ -13,7 +13,7 @@ import { useWallet } from "Wallet";
import { PaymentsCache } from "Cache";
import { Payment } from "Db";
import PageSpinner from "Element/PageSpinner";
import { LiveVideoPlayer } from "Element/LiveVideoPlayer";
/*
[
"imeta",
@ -183,9 +183,6 @@ export function MediaElement(props: MediaElementProps) {
} else if (props.mime.startsWith("audio/")) {
return <audio key={props.url} src={url} controls onError={() => probeFor402()} />;
} else if (props.mime.startsWith("video/")) {
if (props.url.endsWith(".m3u8")) {
return <LiveVideoPlayer stream={props.url} />;
}
return <video key={props.url} src={url} controls onError={() => probeFor402()} />;
} else {
return (

View File

@ -1,5 +1,8 @@
.note {
min-height: 110px;
display: flex;
flex-direction: column;
gap: 12px;
}
.note:hover {
@ -64,30 +67,13 @@
padding: 5px;
}
.note-quote.note > .body {
padding-left: 0;
}
.note > .body .text-frag {
padding-left: 61px;
}
.note > .body .text-frag {
text-overflow: ellipsis;
white-space: pre-wrap;
word-break: normal;
overflow-x: hidden;
overflow-y: visible;
}
.note > .body img,
.note > .body video,
.note > .body audio {
margin-top: 16px;
}
.note > .footer {
padding: 16px 0 0px 61px;
display: inline;
}
.note .footer .footer-reactions {

View File

@ -98,7 +98,7 @@ export default function Note(props: NoteProps) {
const deletions = useMemo(() => getReactions(related, ev.id, EventKind.Deletion), [related]);
const { isMuted } = useModeration();
const isOpMuted = isMuted(ev?.pubkey);
const { ref, inView, entry } = useInView({ triggerOnce: true });
const { ref, inView } = useInView({ triggerOnce: true });
const login = useLogin();
const { pinned, bookmarked } = login;
const publisher = useEventPublisher();

View File

@ -36,7 +36,7 @@ export function NoteContextMenu({ ev, ...props }: NosteContextMenuProps) {
const dispatch = useDispatch();
const { formatMessage } = useIntl();
const login = useLogin();
const { pinned, bookmarked, publicKey, preferences: prefs, relays } = login;
const { pinned, bookmarked, publicKey, preferences: prefs } = login;
const { mute, block } = useModeration();
const publisher = useEventPublisher();
const showReBroadcastModal = useSelector((s: RootState) => s.reBroadcast.show);

View File

@ -244,9 +244,7 @@ export default function NoteFooter(props: NoteFooterProps) {
allocatePool={true}
/>
</div>
<div className="zaps-container">
<ZapsSummary zaps={zaps} />
</div>
<ZapsSummary zaps={zaps} />
</>
);
}

View File

@ -2,7 +2,7 @@ import { NostrEvent } from "@snort/system";
import { FormattedMessage, FormattedNumber } from "react-intl";
import { LNURL } from "@snort/shared";
import { dedupe, hexToBech32, unixNow } from "SnortUtils";
import { dedupe, hexToBech32 } from "SnortUtils";
import FollowListBase from "Element/FollowListBase";
import AsyncButton from "Element/AsyncButton";
import { useWallet } from "Wallet";

View File

@ -5,7 +5,6 @@ import { useIntl, FormattedMessage } from "react-intl";
import { HexKey, NostrEvent, EventPublisher } from "@snort/system";
import { LNURL, LNURLError, LNURLErrorCode, LNURLInvoice, LNURLSuccessAction } from "@snort/shared";
import { System } from "index";
import { formatShort } from "Number";
import Icon from "Icons/Icon";
import useEventPublisher from "Feed/EventPublisher";

View File

@ -2,11 +2,9 @@
display: flex;
align-items: center;
flex-direction: row;
overflow-x: scroll;
-ms-overflow-style: none; /* for Internet Explorer, Edge */
scrollbar-width: none; /* Firefox */
margin-bottom: 18px;
white-space: nowrap;
text-align: center;
user-select: none;
}
.tabs::-webkit-scrollbar {
@ -14,22 +12,16 @@
}
.tab {
flex: 1;
padding: 16px;
color: var(--font-tertiary-color);
border: 1px solid var(--border-color);
border-radius: 16px;
font-weight: 600;
font-size: 14px;
padding: 6px 12px;
text-align: center;
font-feature-settings: "tnum";
}
.tab:not(:last-of-type) {
margin-right: 8px;
font-weight: 500;
font-size: 16px;
letter-spacing: 0.2px;
}
.tab.active {
border-color: var(--font-color);
border-bottom: 1px solid var(--highlight);
color: var(--font-color);
}
@ -44,5 +36,5 @@
}
.tab:hover {
border-color: var(--font-color);
border-color: var(--highlight);
}

View File

@ -21,7 +21,7 @@ interface TabElementProps extends Omit<TabsProps, "tabs"> {
export const TabElement = ({ t, tab, setTab }: TabElementProps) => {
return (
<div
className={`tab ${tab.value === t.value ? "active" : ""} ${t.disabled ? "disabled" : ""}`}
className={`tab${tab.value === t.value ? " active" : ""}${t.disabled ? " disabled" : ""}`}
onClick={() => !t.disabled && setTab(t)}>
{t.text}
</div>

View File

@ -45,10 +45,8 @@
}
.zaps-summary {
margin-top: 8px;
display: flex;
flex-direction: row;
margin-left: 56px;
}
.note.thread-root .zaps-summary {

View File

@ -5,7 +5,7 @@ import { LoginSessionType, LoginStore } from "Login";
import { generateBip39Entropy, entropyToPrivateKey } from "nip6";
import { getNip05PubKey } from "Pages/LoginPage";
import { bech32ToHex } from "SnortUtils";
import { Nip7Signer, Nip46Signer } from "@snort/system";
import { Nip46Signer } from "@snort/system";
export default function useLoginHandler() {
const { formatMessage } = useIntl();

View File

@ -28,20 +28,15 @@ header {
display: flex;
flex-direction: row;
align-items: center;
gap: 24px;
}
.header-actions .btn-rnd {
position: relative;
margin-right: 8px;
.header-actions .btn {
border-radius: 0;
padding: 5px;
}
@media (min-width: 520px) {
.header-actions .btn-rnd:last-of-type {
margin-right: 16px;
}
}
.header-actions .btn-rnd .has-unread {
.header-actions .btn .has-unread {
background: var(--highlight);
border-radius: 100%;
width: 9px;
@ -52,20 +47,24 @@ header {
}
@media (max-width: 520px) {
.header-actions .btn-rnd .has-unread {
.header-actions .btn .has-unread {
top: 2px;
right: 2px;
}
}
.search {
margin: 0 10px 0 10px;
flex-grow: 1;
display: flex;
padding: 9px 16px;
background: var(--gray-superdark);
border-radius: 1000px;
}
.search input {
margin: 0 5px 0 5px;
}
.search .btn {
display: none;
border: none !important;
border-radius: 0 !important;
font-size: 15px;
line-height: 21px;
padding: 0 !important;
}

View File

@ -2,7 +2,7 @@ import "./Layout.css";
import { useEffect, useMemo, useState } from "react";
import { useDispatch, useSelector } from "react-redux";
import { Outlet, useLocation, useNavigate } from "react-router-dom";
import { FormattedMessage } from "react-intl";
import { FormattedMessage, useIntl } from "react-intl";
import { useUserProfile } from "@snort/system-react";
import messages from "./messages";
@ -113,15 +113,13 @@ export default function Layout() {
)}
</div>
<div>
{publicKey ? (
<AccountHeader />
) : (
<button type="button" onClick={() => navigate("/login")}>
<FormattedMessage {...messages.Login} />
</button>
)}
</div>
{publicKey ? (
<AccountHeader />
) : (
<button type="button" onClick={() => navigate("/login")}>
<FormattedMessage {...messages.Login} />
</button>
)}
</header>
)}
<Outlet />
@ -141,6 +139,7 @@ export default function Layout() {
const AccountHeader = () => {
const navigate = useNavigate();
const { formatMessage } = useIntl();
const { publicKey, latestNotification, readNotifications } = useLogin();
const profile = useUserProfile(System, publicKey);
@ -169,17 +168,15 @@ const AccountHeader = () => {
return (
<div className="header-actions">
<div className="btn btn-rnd" onClick={() => navigate("/wallet")}>
<Icon name="wallet" />
<div className="search">
<input type="text" placeholder={formatMessage({ defaultMessage: "Search" })} className="w-max" />
<Icon name="search" size={24} />
</div>
<div className="btn btn-rnd" onClick={() => navigate("/search")}>
<Icon name="search" />
</div>
<div className="btn btn-rnd" onClick={() => navigate("/messages")}>
<div className="btn" onClick={() => navigate("/messages")}>
<Icon name="mail" size={24} />
{unreadDms > 0 && <span className="has-unread"></span>}
</div>
<div className="btn btn-rnd" onClick={goToNotifications}>
<div className="btn" onClick={goToNotifications}>
<Icon name="bell-v2" size={24} />
{hasNotifications && <span className="has-unread"></span>}
</div>

View File

@ -1,31 +0,0 @@
.live-page {
display: grid;
height: calc(100% - 105px);
padding: 24px;
grid-template-columns: auto 350px;
gap: 16px;
}
@media (min-width: 2000px) {
.live-page {
grid-template-columns: auto 450px;
}
}
.live-page > div:nth-child(1) {
overflow-y: auto;
}
.live-page video {
width: 100%;
aspect-ratio: 16/9;
}
.live-page .pill {
padding: 4px 8px;
border-radius: 20px;
font-size: 12px;
line-height: 16px;
font-weight: 600;
color: var(--font-secondary-color);
}

View File

@ -1,65 +0,0 @@
import "./LivePage.css";
import { parseNostrLink } from "@snort/system";
import { useParams } from "react-router-dom";
import { LiveVideoPlayer } from "Element/LiveVideoPlayer";
import { findTag, unwrap } from "SnortUtils";
import PageSpinner from "Element/PageSpinner";
import { LiveChat } from "Element/LiveChat";
import useEventFeed from "Feed/EventFeed";
import ProfilePreview from "Element/ProfilePreview";
import AsyncButton from "Element/AsyncButton";
import { FormattedMessage } from "react-intl";
import Icon from "Icons/Icon";
export function LivePage() {
const params = useParams();
const link = parseNostrLink(unwrap(params.id));
const thisEvent = useEventFeed(link);
if (!thisEvent.data) {
return <PageSpinner />;
}
return (
<div className="live-page main-content">
<div>
<LiveVideoPlayer stream={unwrap(findTag(thisEvent.data, "streaming"))} autoPlay={true} />
<div className="flex">
<div className="f-grow">
<h1>{findTag(thisEvent.data, "title")}</h1>
<p>{findTag(thisEvent.data, "summary")}</p>
<div>
{thisEvent.data?.tags
.filter(a => a[0] === "t")
.map(a => a[1])
.map(a => (
<div className="pill" key={a}>
{a}
</div>
))}
</div>
</div>
<div>
<ProfilePreview
pubkey={thisEvent.data.pubkey}
className="g10"
options={{
about: false,
}}
actions={
<div className="flex">
<AsyncButton onClick={() => {}}>
<Icon name="zap" size={16} className="mr5" />
<FormattedMessage defaultMessage="Zap" />
</AsyncButton>
</div>
}
/>
</div>
</div>
</div>
<LiveChat ev={thisEvent.data} link={link} />
</div>
);
}

View File

@ -35,22 +35,12 @@ export default function RootPage() {
value: 1,
data: "/conversations",
},
Global: {
text: formatMessage(messages.Global),
value: 2,
data: "/global",
},
Discover: {
text: formatMessage({ defaultMessage: "Discover" }),
value: 3,
data: "/discover",
},
};
const tagTabs = tags.item.map((t, idx) => {
return { text: `#${t}`, value: idx + 3, data: `/tag/${t}` };
});
const tabs = [RootTab.Notes, RootTab.Conversations, RootTab.Global, RootTab.Discover, ...tagTabs];
const tabs = [RootTab.Notes, RootTab.Conversations, ...tagTabs];
const tab = useMemo(() => {
const pTab = location.pathname.split("/").slice(-1)[0];
@ -66,12 +56,6 @@ export default function RootPage() {
case "conversations": {
return RootTab.Conversations;
}
case "global": {
return RootTab.Global;
}
case "discover": {
return RootTab.Discover;
}
default: {
return RootTab.Notes;
}

View File

@ -1,12 +1,12 @@
import { matchSorter } from "match-sorter";
export default async function searchEmoji(key: string) {
const { lib } = await import("emojilib");
const emoji = await import("emojilib");
/* build proper library with included name of the emoji */
const library = Object.entries(lib).map(([name, emojiObject]) => ({
...emojiObject,
keywords: [name, ...emojiObject.keywords],
name,
const library = Object.entries(emoji).map(([emoji, keywords]) => ({
name: keywords[0],
keywords,
char: emoji,
}));
return matchSorter(library, key, { keys: ["keywords"] });
}

View File

@ -14,9 +14,6 @@
--success: #2ad544;
--warning: #ff8800;
/* V2 */
--border-primary: #1a1a1a;
--gray-superlight: #eee;
--gray-light: #999;
--gray-medium: #7b7b7b;
@ -125,12 +122,8 @@ body #root > div:not(.page) header {
}
.card {
padding: 16px 12px;
border-bottom: 1px solid var(--border-primary);
}
html.light .card {
box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.05);
padding: 16px;
border-bottom: 1px solid var(--gray-superdark);
}
.card .header {
@ -247,7 +240,7 @@ button.icon:hover {
user-select: none;
background: none;
border: none;
display: inline-block;
display: inline-flex;
}
.btn-warn {
@ -554,7 +547,7 @@ small.xs {
}
.main-content {
border: 1px solid var(--border-primary);
border: 1px solid var(--gray-superdark);
}
.bold {

View File

@ -35,7 +35,6 @@ import DebugPage from "Pages/Debug";
import { db } from "Db";
import { preload, RelayMetrics, UserCache, UserRelays } from "Cache";
import { LoginStore } from "Login";
import { LivePage } from "Pages/LivePage";
/**
* Singleton nostr system
@ -145,10 +144,6 @@ export const router = createBrowserRouter([
path: "/zap-pool",
element: <ZapPoolPage />,
},
{
path: "/live/:id",
element: <LivePage />,
},
...NewUserRoutes,
...WalletRoutes,
...SubscribeRoutes,

View File

@ -7,16 +7,20 @@ const ESLintPlugin = require("eslint-webpack-plugin");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const CssMinimizerPlugin = require("css-minimizer-webpack-plugin");
const CopyPlugin = require("copy-webpack-plugin");
const TsTransformer = require("@formatjs/ts-transformer");
const isProduction = process.env.NODE_ENV == "production";
const config = {
entry: {
main: "./src/index.tsx",
sw: {
import: "./src/service-worker.ts",
filename: "service-worker.js",
},
},
target: "browserslist",
devtool: isProduction ? "source-map" : "eval",
mode: isProduction ? "production" : "development",
devtool: isProduction ? "source-map" : "cheap-module-source-map",
output: {
publicPath: "/",
path: path.resolve(__dirname, "build"),
@ -49,29 +53,46 @@ const config = {
favicon: "public/favicon.ico",
excludeChunks: ["sw"],
}),
new ESLintPlugin(),
new ESLintPlugin({
extensions: ["js", "mjs", "jsx", "ts", "tsx"],
eslintPath: require.resolve("eslint"),
failOnError: !isProduction,
cache: true,
}),
new MiniCssExtractPlugin({
filename: isProduction ? "[name].[chunkhash].css" : "[name].css",
}),
],
module: {
rules: [
{
enforce: "pre",
exclude: /@babel(?:\/|\\{1,2})runtime/,
test: /\.(js|mjs|jsx|ts|tsx|css)$/,
loader: require.resolve("source-map-loader"),
},
{
test: /\.tsx?$/i,
use: [
"babel-loader",
{
loader: "ts-loader",
loader: require.resolve("babel-loader"),
options: {
getCustomTransformers() {
return {
before: [
TsTransformer.transform({
overrideIdFn: "[sha512:contenthash:base64:6]",
}),
],
};
},
babelrc: false,
configFile: false,
presets: [
"@babel/preset-env",
["@babel/preset-react", { runtime: "automatic" }],
"@babel/preset-typescript",
],
plugins: [
[
"formatjs",
{
idInterpolationPattern: "[sha512:contenthash:base64:6]",
ast: true,
},
],
],
},
},
],
@ -79,7 +100,7 @@ const config = {
},
{
test: /\.css$/i,
use: [MiniCssExtractPlugin.loader, "css-loader"],
use: [MiniCssExtractPlugin.loader, require.resolve("css-loader")],
},
{
test: /\.(eot|svg|ttf|woff|woff2|png|jpg|gif|webp)$/i,
@ -127,15 +148,4 @@ const config = {
},
};
module.exports = () => {
if (isProduction) {
config.mode = "production";
config.entry.sw = {
import: "./src/service-worker.ts",
filename: "service-worker.js",
};
} else {
config.mode = "development";
}
return config;
};
module.exports = () => config;

477
yarn.lock
View File

@ -188,6 +188,15 @@ __metadata:
languageName: node
linkType: hard
"@babel/helper-annotate-as-pure@npm:^7.22.5":
version: 7.22.5
resolution: "@babel/helper-annotate-as-pure@npm:7.22.5"
dependencies:
"@babel/types": ^7.22.5
checksum: 53da330f1835c46f26b7bf4da31f7a496dee9fd8696cca12366b94ba19d97421ce519a74a837f687749318f94d1a37f8d1abcbf35e8ed22c32d16373b2f6198d
languageName: node
linkType: hard
"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.18.6":
version: 7.18.9
resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.18.9"
@ -261,6 +270,25 @@ __metadata:
languageName: node
linkType: hard
"@babel/helper-create-class-features-plugin@npm:^7.22.9":
version: 7.22.9
resolution: "@babel/helper-create-class-features-plugin@npm:7.22.9"
dependencies:
"@babel/helper-annotate-as-pure": ^7.22.5
"@babel/helper-environment-visitor": ^7.22.5
"@babel/helper-function-name": ^7.22.5
"@babel/helper-member-expression-to-functions": ^7.22.5
"@babel/helper-optimise-call-expression": ^7.22.5
"@babel/helper-replace-supers": ^7.22.9
"@babel/helper-skip-transparent-expression-wrappers": ^7.22.5
"@babel/helper-split-export-declaration": ^7.22.6
semver: ^6.3.1
peerDependencies:
"@babel/core": ^7.0.0
checksum: 6c2436d1a5a3f1ff24628d78fa8c6d3120c40285aa3eda7815b1adbf8c5951e0dd73d368cf845825888fa3dc2f207dadce53309825598d7c67953e5ed9dd51d2
languageName: node
linkType: hard
"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.20.5":
version: 7.21.4
resolution: "@babel/helper-create-regexp-features-plugin@npm:7.21.4"
@ -366,6 +394,15 @@ __metadata:
languageName: node
linkType: hard
"@babel/helper-member-expression-to-functions@npm:^7.22.5":
version: 7.22.5
resolution: "@babel/helper-member-expression-to-functions@npm:7.22.5"
dependencies:
"@babel/types": ^7.22.5
checksum: 4bd5791529c280c00743e8bdc669ef0d4cd1620d6e3d35e0d42b862f8262bc2364973e5968007f960780344c539a4b9cf92ab41f5b4f94560a9620f536de2a39
languageName: node
linkType: hard
"@babel/helper-module-imports@npm:^7.10.4, @babel/helper-module-imports@npm:^7.18.6, @babel/helper-module-imports@npm:^7.21.4":
version: 7.21.4
resolution: "@babel/helper-module-imports@npm:7.21.4"
@ -416,7 +453,7 @@ __metadata:
languageName: node
linkType: hard
"@babel/helper-module-transforms@npm:^7.22.9":
"@babel/helper-module-transforms@npm:^7.22.5, @babel/helper-module-transforms@npm:^7.22.9":
version: 7.22.9
resolution: "@babel/helper-module-transforms@npm:7.22.9"
dependencies:
@ -440,6 +477,15 @@ __metadata:
languageName: node
linkType: hard
"@babel/helper-optimise-call-expression@npm:^7.22.5":
version: 7.22.5
resolution: "@babel/helper-optimise-call-expression@npm:7.22.5"
dependencies:
"@babel/types": ^7.22.5
checksum: c70ef6cc6b6ed32eeeec4482127e8be5451d0e5282d5495d5d569d39eb04d7f1d66ec99b327f45d1d5842a9ad8c22d48567e93fc502003a47de78d122e355f7c
languageName: node
linkType: hard
"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.16.7, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.18.9, @babel/helper-plugin-utils@npm:^7.19.0, @babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3":
version: 7.20.2
resolution: "@babel/helper-plugin-utils@npm:7.20.2"
@ -454,6 +500,13 @@ __metadata:
languageName: node
linkType: hard
"@babel/helper-plugin-utils@npm:^7.22.5":
version: 7.22.5
resolution: "@babel/helper-plugin-utils@npm:7.22.5"
checksum: c0fc7227076b6041acd2f0e818145d2e8c41968cc52fb5ca70eed48e21b8fe6dd88a0a91cbddf4951e33647336eb5ae184747ca706817ca3bef5e9e905151ff5
languageName: node
linkType: hard
"@babel/helper-remap-async-to-generator@npm:^7.18.9":
version: 7.18.9
resolution: "@babel/helper-remap-async-to-generator@npm:7.18.9"
@ -482,6 +535,19 @@ __metadata:
languageName: node
linkType: hard
"@babel/helper-replace-supers@npm:^7.22.9":
version: 7.22.9
resolution: "@babel/helper-replace-supers@npm:7.22.9"
dependencies:
"@babel/helper-environment-visitor": ^7.22.5
"@babel/helper-member-expression-to-functions": ^7.22.5
"@babel/helper-optimise-call-expression": ^7.22.5
peerDependencies:
"@babel/core": ^7.0.0
checksum: d41471f56ff2616459d35a5df1900d5f0756ae78b1027040365325ef332d66e08e3be02a9489756d870887585ff222403a228546e93dd7019e19e59c0c0fe586
languageName: node
linkType: hard
"@babel/helper-simple-access@npm:^7.20.2":
version: 7.20.2
resolution: "@babel/helper-simple-access@npm:7.20.2"
@ -518,6 +584,15 @@ __metadata:
languageName: node
linkType: hard
"@babel/helper-skip-transparent-expression-wrappers@npm:^7.22.5":
version: 7.22.5
resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.22.5"
dependencies:
"@babel/types": ^7.22.5
checksum: 1012ef2295eb12dc073f2b9edf3425661e9b8432a3387e62a8bc27c42963f1f216ab3124228015c748770b2257b4f1fda882ca8fa34c0bf485e929ae5bc45244
languageName: node
linkType: hard
"@babel/helper-split-export-declaration@npm:^7.18.6":
version: 7.18.6
resolution: "@babel/helper-split-export-declaration@npm:7.18.6"
@ -1002,6 +1077,17 @@ __metadata:
languageName: node
linkType: hard
"@babel/plugin-syntax-jsx@npm:^7.22.5":
version: 7.22.5
resolution: "@babel/plugin-syntax-jsx@npm:7.22.5"
dependencies:
"@babel/helper-plugin-utils": ^7.22.5
peerDependencies:
"@babel/core": ^7.0.0-0
checksum: 8829d30c2617ab31393d99cec2978e41f014f4ac6f01a1cecf4c4dd8320c3ec12fdc3ce121126b2d8d32f6887e99ca1a0bad53dedb1e6ad165640b92b24980ce
languageName: node
linkType: hard
"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4, @babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3":
version: 7.10.4
resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4"
@ -1090,6 +1176,17 @@ __metadata:
languageName: node
linkType: hard
"@babel/plugin-syntax-typescript@npm:^7.22.5":
version: 7.22.5
resolution: "@babel/plugin-syntax-typescript@npm:7.22.5"
dependencies:
"@babel/helper-plugin-utils": ^7.22.5
peerDependencies:
"@babel/core": ^7.0.0-0
checksum: 8ab7718fbb026d64da93681a57797d60326097fd7cb930380c8bffd9eb101689e90142c760a14b51e8e69c88a73ba3da956cb4520a3b0c65743aee5c71ef360a
languageName: node
linkType: hard
"@babel/plugin-syntax-typescript@npm:^7.7.2":
version: 7.21.4
resolution: "@babel/plugin-syntax-typescript@npm:7.21.4"
@ -1342,6 +1439,19 @@ __metadata:
languageName: node
linkType: hard
"@babel/plugin-transform-modules-commonjs@npm:^7.22.5":
version: 7.22.5
resolution: "@babel/plugin-transform-modules-commonjs@npm:7.22.5"
dependencies:
"@babel/helper-module-transforms": ^7.22.5
"@babel/helper-plugin-utils": ^7.22.5
"@babel/helper-simple-access": ^7.22.5
peerDependencies:
"@babel/core": ^7.0.0-0
checksum: 2067aca8f6454d54ffcce69b02c457cfa61428e11372f6a1d99ff4fcfbb55c396ed2ca6ca886bf06c852e38c1a205b8095921b2364fd0243f3e66bc1dda61caa
languageName: node
linkType: hard
"@babel/plugin-transform-modules-systemjs@npm:^7.20.11":
version: 7.20.11
resolution: "@babel/plugin-transform-modules-systemjs@npm:7.20.11"
@ -1565,6 +1675,20 @@ __metadata:
languageName: node
linkType: hard
"@babel/plugin-transform-typescript@npm:^7.22.5":
version: 7.22.9
resolution: "@babel/plugin-transform-typescript@npm:7.22.9"
dependencies:
"@babel/helper-annotate-as-pure": ^7.22.5
"@babel/helper-create-class-features-plugin": ^7.22.9
"@babel/helper-plugin-utils": ^7.22.5
"@babel/plugin-syntax-typescript": ^7.22.5
peerDependencies:
"@babel/core": ^7.0.0-0
checksum: 6d1317a54d093b302599a4bee8ba9865d0de8b7b6ac1a0746c4316231d632f75b7f086e6e78acb9ac95ba12ba3b9da462dc9ca69370abb4603c4cc987f62e67e
languageName: node
linkType: hard
"@babel/plugin-transform-unicode-escapes@npm:^7.18.10":
version: 7.18.10
resolution: "@babel/plugin-transform-unicode-escapes@npm:7.18.10"
@ -1801,6 +1925,21 @@ __metadata:
languageName: node
linkType: hard
"@babel/preset-typescript@npm:^7.22.5":
version: 7.22.5
resolution: "@babel/preset-typescript@npm:7.22.5"
dependencies:
"@babel/helper-plugin-utils": ^7.22.5
"@babel/helper-validator-option": ^7.22.5
"@babel/plugin-syntax-jsx": ^7.22.5
"@babel/plugin-transform-modules-commonjs": ^7.22.5
"@babel/plugin-transform-typescript": ^7.22.5
peerDependencies:
"@babel/core": ^7.0.0-0
checksum: 7be1670cb4404797d3a473bd72d66eb2b3e0f2f8a672a5e40bdb0812cc66085ec84bcd7b896709764cabf042fdc6b7f2d4755ac7cce10515eb596ff61dab5154
languageName: node
linkType: hard
"@babel/regjsgen@npm:^0.8.0":
version: 0.8.0
resolution: "@babel/regjsgen@npm:0.8.0"
@ -1978,7 +2117,7 @@ __metadata:
languageName: node
linkType: hard
"@eslint-community/eslint-utils@npm:^4.2.0":
"@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0":
version: 4.4.0
resolution: "@eslint-community/eslint-utils@npm:4.4.0"
dependencies:
@ -1989,7 +2128,7 @@ __metadata:
languageName: node
linkType: hard
"@eslint-community/regexpp@npm:^4.4.0":
"@eslint-community/regexpp@npm:^4.4.0, @eslint-community/regexpp@npm:^4.5.1":
version: 4.5.1
resolution: "@eslint-community/regexpp@npm:4.5.1"
checksum: 6d901166d64998d591fab4db1c2f872981ccd5f6fe066a1ad0a93d4e11855ecae6bfb76660869a469563e8882d4307228cebd41142adb409d182f2966771e57e
@ -2058,16 +2197,6 @@ __metadata:
languageName: node
linkType: hard
"@formatjs/ecma402-abstract@npm:1.14.3":
version: 1.14.3
resolution: "@formatjs/ecma402-abstract@npm:1.14.3"
dependencies:
"@formatjs/intl-localematcher": 0.2.32
tslib: ^2.4.0
checksum: 504ae9775094adec611aa0bbc6dadec2360ba30c13331f376feacd75b23f856ac1e45e3c88a572fb91ff917e726d0cc7e6e1b6c5b73af48f53896592362c91d5
languageName: node
linkType: hard
"@formatjs/ecma402-abstract@npm:1.15.0":
version: 1.15.0
resolution: "@formatjs/ecma402-abstract@npm:1.15.0"
@ -2078,23 +2207,22 @@ __metadata:
languageName: node
linkType: hard
"@formatjs/fast-memoize@npm:2.0.1":
version: 2.0.1
resolution: "@formatjs/fast-memoize@npm:2.0.1"
"@formatjs/ecma402-abstract@npm:1.17.0":
version: 1.17.0
resolution: "@formatjs/ecma402-abstract@npm:1.17.0"
dependencies:
"@formatjs/intl-localematcher": 0.4.0
tslib: ^2.4.0
checksum: e434cdc53354666459c47556c403f0ed3391ebab0e851a64e5622d8d81e3b684a74a09c4bf5189885c66e743004601f64e2e2c8c70adf6b00071d4afea20f69d
checksum: cc45d238e541076cb27b9cf02d8b97f789d1744b60218da6d31793204850c159e85f5b2557de3905a365eefd52a1c2e7f1febb9e1f009bad23d5eca17b3de6c8
languageName: node
linkType: hard
"@formatjs/icu-messageformat-parser@npm:2.3.0":
version: 2.3.0
resolution: "@formatjs/icu-messageformat-parser@npm:2.3.0"
"@formatjs/fast-memoize@npm:2.2.0":
version: 2.2.0
resolution: "@formatjs/fast-memoize@npm:2.2.0"
dependencies:
"@formatjs/ecma402-abstract": 1.14.3
"@formatjs/icu-skeleton-parser": 1.3.18
tslib: ^2.4.0
checksum: e8aca733bed81c94ec16fa9f1a88dbaf93a644a8c5796a6ab1e795112dd1f6c1e92528a123483d3034ac5e6b2b454481ef61f7e56e6e77f1467f9524be7fe331
checksum: 8697fe72a7ece252d600a7d08105f2a2f758e2dd96f54ac0a4c508b1205a559fc08835635e1f8e5ca9dcc3ee61ce1fca4a0e7047b402f29fc96051e293a280ff
languageName: node
linkType: hard
@ -2109,13 +2237,14 @@ __metadata:
languageName: node
linkType: hard
"@formatjs/icu-skeleton-parser@npm:1.3.18":
version: 1.3.18
resolution: "@formatjs/icu-skeleton-parser@npm:1.3.18"
"@formatjs/icu-messageformat-parser@npm:2.6.0":
version: 2.6.0
resolution: "@formatjs/icu-messageformat-parser@npm:2.6.0"
dependencies:
"@formatjs/ecma402-abstract": 1.14.3
"@formatjs/ecma402-abstract": 1.17.0
"@formatjs/icu-skeleton-parser": 1.6.0
tslib: ^2.4.0
checksum: 19655c452ed3c45db07b03c90fbfe6172655b0babb9579f2d9397ca2b3c56e5e17a3beed1d13af12104313e6ed1f14976d7c996756f1a59c977d6f3228518fad
checksum: 67e76416a381663f62cb7ceaa699b3dc4505b9bfd8dda31950b8fa159e9abc1aae85d2ffa08760448083f113bdabca1653796e988b7a12eef891260726e56ed7
languageName: node
linkType: hard
@ -2129,25 +2258,35 @@ __metadata:
languageName: node
linkType: hard
"@formatjs/intl-displaynames@npm:6.2.6":
version: 6.2.6
resolution: "@formatjs/intl-displaynames@npm:6.2.6"
"@formatjs/icu-skeleton-parser@npm:1.6.0":
version: 1.6.0
resolution: "@formatjs/icu-skeleton-parser@npm:1.6.0"
dependencies:
"@formatjs/ecma402-abstract": 1.14.3
"@formatjs/intl-localematcher": 0.2.32
"@formatjs/ecma402-abstract": 1.17.0
tslib: ^2.4.0
checksum: 31a293e2d8809a42b2511a6d32d0bdf3bcbb32a0ef1c16000cf39437d480f307f17515ee521d8d8d9742926535130c16e0b898fe2dfc09ef3d11557edf73b88a
checksum: e0a2e251358fb62cc45ad4783f57ed63db361334634557d5dcf3992b98c2c5409146d890b465321f91d2255eda5d8fdbfc9962e9f2e3fa7b10a738abfbe8ebc0
languageName: node
linkType: hard
"@formatjs/intl-listformat@npm:7.1.9":
version: 7.1.9
resolution: "@formatjs/intl-listformat@npm:7.1.9"
"@formatjs/intl-displaynames@npm:6.5.0":
version: 6.5.0
resolution: "@formatjs/intl-displaynames@npm:6.5.0"
dependencies:
"@formatjs/ecma402-abstract": 1.14.3
"@formatjs/intl-localematcher": 0.2.32
"@formatjs/ecma402-abstract": 1.17.0
"@formatjs/intl-localematcher": 0.4.0
tslib: ^2.4.0
checksum: 0479a76bd51871c5688c2bdfb3c54eb10bfb25884318c7dad372e8a9662552e14b4b6ebe31b933e7dcdced09fdaff35e0b6cfc3b13fcf2d6a6d1817a12736450
checksum: d071f8459796240575e9911052b7116a6e2e43687607b0a5d1ac8ceddbaa85324af78694226c37c8172c0f3e7d6b793f506c5758b6bc50b2110516902b532e12
languageName: node
linkType: hard
"@formatjs/intl-listformat@npm:7.4.0":
version: 7.4.0
resolution: "@formatjs/intl-listformat@npm:7.4.0"
dependencies:
"@formatjs/ecma402-abstract": 1.17.0
"@formatjs/intl-localematcher": 0.4.0
tslib: ^2.4.0
checksum: a2deed31cce57f249e470f54675286c36edc2f5ec1d63a2f36e6315a0154ca06404fa5c00aaefc2c52af57d3d471b17c217e885cc9565e5f54c36509af37fe12
languageName: node
linkType: hard
@ -2160,27 +2299,36 @@ __metadata:
languageName: node
linkType: hard
"@formatjs/intl@npm:2.6.9":
version: 2.6.9
resolution: "@formatjs/intl@npm:2.6.9"
"@formatjs/intl-localematcher@npm:0.4.0":
version: 0.4.0
resolution: "@formatjs/intl-localematcher@npm:0.4.0"
dependencies:
"@formatjs/ecma402-abstract": 1.14.3
"@formatjs/fast-memoize": 2.0.1
"@formatjs/icu-messageformat-parser": 2.3.0
"@formatjs/intl-displaynames": 6.2.6
"@formatjs/intl-listformat": 7.1.9
intl-messageformat: 10.3.3
tslib: ^2.4.0
peerDependencies:
typescript: ^4.7
peerDependenciesMeta:
typescript:
optional: true
checksum: 66243ef05c6bdb5f5d9005e831e946ae1052fc3e49a58642fac36f8bd12757e371a17820530268ffe9805152739b4540c8be6b16277711e050886ac65eb623b0
checksum: c65108e9a81c3733d2b6240ceedc846d0ae59c3606041cb5cc71c13453cdabe295b0dc8559dc4a8acaafdc45876807bd5e9ef37a3ec1cb864e78db655d434b66
languageName: node
linkType: hard
"@formatjs/ts-transformer@npm:3.13.1, @formatjs/ts-transformer@npm:^3.13.1":
"@formatjs/intl@npm:2.9.0":
version: 2.9.0
resolution: "@formatjs/intl@npm:2.9.0"
dependencies:
"@formatjs/ecma402-abstract": 1.17.0
"@formatjs/fast-memoize": 2.2.0
"@formatjs/icu-messageformat-parser": 2.6.0
"@formatjs/intl-displaynames": 6.5.0
"@formatjs/intl-listformat": 7.4.0
intl-messageformat: 10.5.0
tslib: ^2.4.0
peerDependencies:
typescript: ^4.7 || 5
peerDependenciesMeta:
typescript:
optional: true
checksum: 8cd9c9a86ec79148d6e42ace85abbf39e0580a821a6a2d9edceeed3248d439a5f204d988ed714bef92933843a069ee910ed19675d77d60c0472e343dbe610bf4
languageName: node
linkType: hard
"@formatjs/ts-transformer@npm:3.13.1":
version: 3.13.1
resolution: "@formatjs/ts-transformer@npm:3.13.1"
dependencies:
@ -3332,10 +3480,10 @@ __metadata:
"@babel/plugin-syntax-import-assertions": ^7.20.0
"@babel/preset-env": ^7.21.5
"@babel/preset-react": ^7.18.6
"@babel/preset-typescript": ^7.22.5
"@babel/runtime": ^7.22.6
"@cashu/cashu-ts": ^0.6.1
"@formatjs/cli": ^6.0.1
"@formatjs/ts-transformer": ^3.13.1
"@jest/globals": ^29.6.1
"@lightninglabs/lnc-web": ^0.2.3-alpha
"@noble/curves": ^1.0.0
@ -3356,6 +3504,8 @@ __metadata:
"@types/uuid": ^9.0.2
"@types/webscopeio__react-textarea-autocomplete": ^4.7.2
"@types/webtorrent": ^0.109.3
"@typescript-eslint/eslint-plugin": ^6.1.0
"@typescript-eslint/parser": ^6.1.0
"@void-cat/api": ^1.0.4
"@webbtc/webln-types": ^1.0.10
"@webpack-cli/generators": ^3.0.4
@ -3373,7 +3523,6 @@ __metadata:
eslint: ^8.44.0
eslint-plugin-formatjs: ^4.10.1
eslint-webpack-plugin: ^4.0.1
hls.js: ^1.4.6
html-webpack-plugin: ^5.5.1
husky: ">=6"
jest: ^29.5.0
@ -3388,14 +3537,14 @@ __metadata:
react: ^18.2.0
react-dom: ^18.2.0
react-intersection-observer: ^9.4.1
react-intl: ^6.2.8
react-intl: ^6.4.4
react-redux: ^8.0.5
react-router-dom: ^6.5.0
react-textarea-autosize: ^8.4.0
react-twitter-embed: ^4.0.4
source-map-loader: ^4.0.1
terser-webpack-plugin: ^5.3.9
ts-jest: ^29.1.0
ts-loader: ^9.4.2
typescript: ^5.1.6
use-long-press: ^2.0.3
uuid: ^9.0.0
@ -4009,6 +4158,13 @@ __metadata:
languageName: node
linkType: hard
"@types/json-schema@npm:^7.0.12":
version: 7.0.12
resolution: "@types/json-schema@npm:7.0.12"
checksum: 00239e97234eeb5ceefb0c1875d98ade6e922bfec39dd365ec6bd360b5c2f825e612ac4f6e5f1d13601b8b30f378f15e6faa805a3a732f4a1bbe61915163d293
languageName: node
linkType: hard
"@types/json-stable-stringify@npm:^1.0.32":
version: 1.0.34
resolution: "@types/json-stable-stringify@npm:1.0.34"
@ -4211,6 +4367,13 @@ __metadata:
languageName: node
linkType: hard
"@types/semver@npm:^7.5.0":
version: 7.5.0
resolution: "@types/semver@npm:7.5.0"
checksum: 0a64b9b9c7424d9a467658b18dd70d1d781c2d6f033096a6e05762d20ebbad23c1b69b0083b0484722aabf35640b78ccc3de26368bcae1129c87e9df028a22e2
languageName: node
linkType: hard
"@types/serve-index@npm:^1.9.1":
version: 1.9.1
resolution: "@types/serve-index@npm:1.9.1"
@ -4370,6 +4533,32 @@ __metadata:
languageName: node
linkType: hard
"@typescript-eslint/eslint-plugin@npm:^6.1.0":
version: 6.1.0
resolution: "@typescript-eslint/eslint-plugin@npm:6.1.0"
dependencies:
"@eslint-community/regexpp": ^4.5.1
"@typescript-eslint/scope-manager": 6.1.0
"@typescript-eslint/type-utils": 6.1.0
"@typescript-eslint/utils": 6.1.0
"@typescript-eslint/visitor-keys": 6.1.0
debug: ^4.3.4
graphemer: ^1.4.0
ignore: ^5.2.4
natural-compare: ^1.4.0
natural-compare-lite: ^1.4.0
semver: ^7.5.4
ts-api-utils: ^1.0.1
peerDependencies:
"@typescript-eslint/parser": ^6.0.0 || ^6.0.0-alpha
eslint: ^7.0.0 || ^8.0.0
peerDependenciesMeta:
typescript:
optional: true
checksum: e1f05d8d49041b47cdbea8fc80f87f03dc0f7273deb2f34f73661831572fe62976ab3780972496428ce6fa31d3f53236a4c90cd9948d45f5004631edbfa3d42a
languageName: node
linkType: hard
"@typescript-eslint/parser@npm:^5.53.0":
version: 5.57.1
resolution: "@typescript-eslint/parser@npm:5.57.1"
@ -4387,6 +4576,24 @@ __metadata:
languageName: node
linkType: hard
"@typescript-eslint/parser@npm:^6.1.0":
version: 6.1.0
resolution: "@typescript-eslint/parser@npm:6.1.0"
dependencies:
"@typescript-eslint/scope-manager": 6.1.0
"@typescript-eslint/types": 6.1.0
"@typescript-eslint/typescript-estree": 6.1.0
"@typescript-eslint/visitor-keys": 6.1.0
debug: ^4.3.4
peerDependencies:
eslint: ^7.0.0 || ^8.0.0
peerDependenciesMeta:
typescript:
optional: true
checksum: dc59cda4396ca09e3aa2bd5b99d8ef9526df56567d4a9b953668102116db975dfb2426c3369560a2b02e083d49e43b4cebb252144d175e900096eb0b17f7ae3c
languageName: node
linkType: hard
"@typescript-eslint/scope-manager@npm:5.57.1":
version: 5.57.1
resolution: "@typescript-eslint/scope-manager@npm:5.57.1"
@ -4397,6 +4604,16 @@ __metadata:
languageName: node
linkType: hard
"@typescript-eslint/scope-manager@npm:6.1.0":
version: 6.1.0
resolution: "@typescript-eslint/scope-manager@npm:6.1.0"
dependencies:
"@typescript-eslint/types": 6.1.0
"@typescript-eslint/visitor-keys": 6.1.0
checksum: 57c73b8713be79abebbcfef1d58f78a820ea88a5c37a44d2c9a76130216d9ee824134fae215dde794121cfaf1284370da77e1e5184ba71812aebb1a8cf39f325
languageName: node
linkType: hard
"@typescript-eslint/type-utils@npm:5.57.1":
version: 5.57.1
resolution: "@typescript-eslint/type-utils@npm:5.57.1"
@ -4414,6 +4631,23 @@ __metadata:
languageName: node
linkType: hard
"@typescript-eslint/type-utils@npm:6.1.0":
version: 6.1.0
resolution: "@typescript-eslint/type-utils@npm:6.1.0"
dependencies:
"@typescript-eslint/typescript-estree": 6.1.0
"@typescript-eslint/utils": 6.1.0
debug: ^4.3.4
ts-api-utils: ^1.0.1
peerDependencies:
eslint: ^7.0.0 || ^8.0.0
peerDependenciesMeta:
typescript:
optional: true
checksum: 83b2ffcf3aa297b60deb2e9ddd946b9c15cc55d0727dfc8a3447e8e5402428f6ee3fc67fb9d5d8ade25da4069ca77e23777caf02bcacd2a1e75b66cfc4d76579
languageName: node
linkType: hard
"@typescript-eslint/types@npm:5.57.1":
version: 5.57.1
resolution: "@typescript-eslint/types@npm:5.57.1"
@ -4428,6 +4662,13 @@ __metadata:
languageName: node
linkType: hard
"@typescript-eslint/types@npm:6.1.0":
version: 6.1.0
resolution: "@typescript-eslint/types@npm:6.1.0"
checksum: c1f55ebfda7af5e63077beb65fe5a82de7ae7afb913a4ebfb023f2889d5ec06f75b6ebca6ee45d6d205508a52fa5a6bf5821182c3e7e4400ac9304083b88f139
languageName: node
linkType: hard
"@typescript-eslint/typescript-estree@npm:5.57.1":
version: 5.57.1
resolution: "@typescript-eslint/typescript-estree@npm:5.57.1"
@ -4464,6 +4705,24 @@ __metadata:
languageName: node
linkType: hard
"@typescript-eslint/typescript-estree@npm:6.1.0":
version: 6.1.0
resolution: "@typescript-eslint/typescript-estree@npm:6.1.0"
dependencies:
"@typescript-eslint/types": 6.1.0
"@typescript-eslint/visitor-keys": 6.1.0
debug: ^4.3.4
globby: ^11.1.0
is-glob: ^4.0.3
semver: ^7.5.4
ts-api-utils: ^1.0.1
peerDependenciesMeta:
typescript:
optional: true
checksum: 42729b8952a78ff9fc7d3833e16de25f1a3502461ebe5d09a28fb4375c8e5978dde0dd1f8a7973bf7470ff9023cce84de82e968b02a09f54a0f753d21d9127e8
languageName: node
linkType: hard
"@typescript-eslint/utils@npm:5.57.1":
version: 5.57.1
resolution: "@typescript-eslint/utils@npm:5.57.1"
@ -4482,6 +4741,23 @@ __metadata:
languageName: node
linkType: hard
"@typescript-eslint/utils@npm:6.1.0":
version: 6.1.0
resolution: "@typescript-eslint/utils@npm:6.1.0"
dependencies:
"@eslint-community/eslint-utils": ^4.4.0
"@types/json-schema": ^7.0.12
"@types/semver": ^7.5.0
"@typescript-eslint/scope-manager": 6.1.0
"@typescript-eslint/types": 6.1.0
"@typescript-eslint/typescript-estree": 6.1.0
semver: ^7.5.4
peerDependencies:
eslint: ^7.0.0 || ^8.0.0
checksum: eb47a6b56e142ca68231f0f43af68d4cf5161235943aaf19c268156e3e751e10dd8ea3e0e297a7c0796b9eb3c5268b3c659821b909799949b55a524707c82e13
languageName: node
linkType: hard
"@typescript-eslint/visitor-keys@npm:5.57.1":
version: 5.57.1
resolution: "@typescript-eslint/visitor-keys@npm:5.57.1"
@ -4502,6 +4778,16 @@ __metadata:
languageName: node
linkType: hard
"@typescript-eslint/visitor-keys@npm:6.1.0":
version: 6.1.0
resolution: "@typescript-eslint/visitor-keys@npm:6.1.0"
dependencies:
"@typescript-eslint/types": 6.1.0
eslint-visitor-keys: ^3.4.1
checksum: 21c7c9b9a52325e3b67c0015deb99a1603b19703af7c002e87f32e2d8f9910813985877ee7b589dc9938d308e3d082cf97c8ca43c2c95b86a919c426d8913439
languageName: node
linkType: hard
"@void-cat/api@npm:^1.0.4":
version: 1.0.4
resolution: "@void-cat/api@npm:1.0.4::__archiveUrl=https%3A%2F%2Fgit.v0l.io%2Fapi%2Fpackages%2FKieran%2Fnpm%2F%2540void-cat%252Fapi%2F-%2F1.0.4%2Fapi-1.0.4.tgz"
@ -8466,13 +8752,6 @@ __metadata:
languageName: node
linkType: hard
"hls.js@npm:^1.4.6":
version: 1.4.6
resolution: "hls.js@npm:1.4.6"
checksum: 7a44107c92e52859bfd5a37b6ea647cfea20848466286c1280b2cf956cfaccf8131fa54867cd8edfb60042a238025fb8788263fd9dfb9d1798ddbdc08f5aab50
languageName: node
linkType: hard
"hoist-non-react-statics@npm:^3.3.0, hoist-non-react-statics@npm:^3.3.2":
version: 3.3.2
resolution: "hoist-non-react-statics@npm:3.3.2"
@ -8725,7 +9004,7 @@ __metadata:
languageName: node
linkType: hard
"iconv-lite@npm:0.6.3, iconv-lite@npm:^0.6.2":
"iconv-lite@npm:0.6.3, iconv-lite@npm:^0.6.2, iconv-lite@npm:^0.6.3":
version: 0.6.3
resolution: "iconv-lite@npm:0.6.3"
dependencies:
@ -8766,7 +9045,7 @@ __metadata:
languageName: node
linkType: hard
"ignore@npm:^5.2.0":
"ignore@npm:^5.2.0, ignore@npm:^5.2.4":
version: 5.2.4
resolution: "ignore@npm:5.2.4"
checksum: 3d4c309c6006e2621659311783eaea7ebcd41fe4ca1d78c91c473157ad6666a57a2df790fe0d07a12300d9aac2888204d7be8d59f9aaf665b1c7fcdb432517ef
@ -8895,15 +9174,15 @@ __metadata:
languageName: node
linkType: hard
"intl-messageformat@npm:10.3.3":
version: 10.3.3
resolution: "intl-messageformat@npm:10.3.3"
"intl-messageformat@npm:10.5.0":
version: 10.5.0
resolution: "intl-messageformat@npm:10.5.0"
dependencies:
"@formatjs/ecma402-abstract": 1.14.3
"@formatjs/fast-memoize": 2.0.1
"@formatjs/icu-messageformat-parser": 2.3.0
"@formatjs/ecma402-abstract": 1.17.0
"@formatjs/fast-memoize": 2.2.0
"@formatjs/icu-messageformat-parser": 2.6.0
tslib: ^2.4.0
checksum: 05baee05d31b911dc4bb1774ddf0799dc136723203461f73fecb185e2e2d18b148311db7ef14294d664a6212311c5d9116c3e850cf609dd6348e347f3d07e660
checksum: 164c49028b8bf2685f57f8f018d9a2c1d827e94b1c300ebf9df50b6aef25adedb3bf511b3cf603364d67257634b57926935066b2f3715ccb6c2af683cc0815a6
languageName: node
linkType: hard
@ -12585,27 +12864,27 @@ __metadata:
languageName: node
linkType: hard
"react-intl@npm:^6.2.8":
version: 6.3.2
resolution: "react-intl@npm:6.3.2"
"react-intl@npm:^6.4.4":
version: 6.4.4
resolution: "react-intl@npm:6.4.4"
dependencies:
"@formatjs/ecma402-abstract": 1.14.3
"@formatjs/icu-messageformat-parser": 2.3.0
"@formatjs/intl": 2.6.9
"@formatjs/intl-displaynames": 6.2.6
"@formatjs/intl-listformat": 7.1.9
"@formatjs/ecma402-abstract": 1.17.0
"@formatjs/icu-messageformat-parser": 2.6.0
"@formatjs/intl": 2.9.0
"@formatjs/intl-displaynames": 6.5.0
"@formatjs/intl-listformat": 7.4.0
"@types/hoist-non-react-statics": ^3.3.1
"@types/react": 16 || 17 || 18
hoist-non-react-statics: ^3.3.2
intl-messageformat: 10.3.3
intl-messageformat: 10.5.0
tslib: ^2.4.0
peerDependencies:
react: ^16.6.0 || 17 || 18
typescript: ^4.7
typescript: ^4.7 || 5
peerDependenciesMeta:
typescript:
optional: true
checksum: 0b1ee1170ac800da8396b1f7d59111db3b2c1eb6db0c071b02fc15c0c81b19641badfab0060db39faf3ed1d02f932b8976b39d371d61eb8322e38127b2dc7e00
checksum: c7003ff4927d6d6bf43edc04008bca48181bbfc1c669071746cbaa63b35fdd655c3172c653ac711eeb5053859aa0603048791f3ac8ca5726014a6d357682dfe1
languageName: node
linkType: hard
@ -13324,7 +13603,7 @@ __metadata:
languageName: node
linkType: hard
"semver@npm:^7.5.3":
"semver@npm:^7.5.3, semver@npm:^7.5.4":
version: 7.5.4
resolution: "semver@npm:7.5.4"
dependencies:
@ -13645,6 +13924,19 @@ __metadata:
languageName: node
linkType: hard
"source-map-loader@npm:^4.0.1":
version: 4.0.1
resolution: "source-map-loader@npm:4.0.1"
dependencies:
abab: ^2.0.6
iconv-lite: ^0.6.3
source-map-js: ^1.0.2
peerDependencies:
webpack: ^5.72.1
checksum: 4ddca8b03dc61f406effd4bffe70de4b87fef48bae6f737017b2dabcbc7d609133325be1e73838e9265331de28039111d729fcbb8bce88a6018a816bef510eb1
languageName: node
linkType: hard
"source-map-support@npm:0.5.13":
version: 0.5.13
resolution: "source-map-support@npm:0.5.13"
@ -14357,6 +14649,15 @@ __metadata:
languageName: node
linkType: hard
"ts-api-utils@npm:^1.0.1":
version: 1.0.1
resolution: "ts-api-utils@npm:1.0.1"
peerDependencies:
typescript: ">=4.2.0"
checksum: 78794fc7270d295b36c1ac613465b5dc7e7226907a533125b30f177efef9dd630d4e503b00be31b44335eb2ebf9e136ebe97353f8fc5d383885d5fead9d54c09
languageName: node
linkType: hard
"ts-jest@npm:^29.1.0":
version: 29.1.0
resolution: "ts-jest@npm:29.1.0"