From 924d749072fc69512eaf956b3b91236589b33d5a Mon Sep 17 00:00:00 2001 From: Louis <6723574+louisgv@users.noreply.github.com> Date: Fri, 14 Oct 2022 23:32:48 -0400 Subject: [PATCH 01/12] Initial refactor of CSUI mount, ready to test multiple anchors --- .../extension-devtools/common-path.ts | 7 +- .../manifest-factory/create-manifest.ts | 15 +- .../features/manifest-factory/scaffolder.ts | 30 ++- cli/plasmo/src/type.ts | 52 +++-- cli/plasmo/templates/static/common/csui.ts | 194 ++++++++++++++++++ .../react18/content-script-ui-mount.tsx | 115 +++-------- .../static/svelte3/content-script-ui-mount.ts | 2 +- .../static/vue3/content-script-ui-mount.ts | 2 +- cli/plasmo/tsconfig.json | 16 +- examples | 2 +- packages/config | 2 +- packages/parcel-resolver/package.json | 2 +- .../src/handle-absolute-root.ts | 39 ++++ .../src/handle-module-exports.ts | 22 ++ .../src/handle-plasmo-internal.ts | 28 +++ .../parcel-resolver/src/handle-tilde-src.ts | 23 +-- packages/parcel-resolver/src/index.ts | 36 +--- packages/parcel-resolver/src/shared.ts | 33 ++- 18 files changed, 450 insertions(+), 170 deletions(-) create mode 100644 cli/plasmo/templates/static/common/csui.ts create mode 100644 packages/parcel-resolver/src/handle-absolute-root.ts create mode 100644 packages/parcel-resolver/src/handle-module-exports.ts create mode 100644 packages/parcel-resolver/src/handle-plasmo-internal.ts diff --git a/cli/plasmo/src/features/extension-devtools/common-path.ts b/cli/plasmo/src/features/extension-devtools/common-path.ts index de7724506..116426a96 100644 --- a/cli/plasmo/src/features/extension-devtools/common-path.ts +++ b/cli/plasmo/src/features/extension-devtools/common-path.ts @@ -8,9 +8,10 @@ import { getBundleConfig } from "./get-bundle-config" export const getCommonPath = ( projectDirectory = cwd(), - { target } = getBundleConfig(), - dotPlasmo = ".plasmo" + { target } = getBundleConfig() ) => { + process.env.PLASMO_PROJECT_DIR = projectDirectory + const packageName = basename(projectDirectory) process.env.PLASMO_SRC_PATH = @@ -38,7 +39,7 @@ export const getCommonPath = ( const distDirectory = resolve(buildDirectory, distDirectoryName) - const dotPlasmoDirectory = resolve(projectDirectory, dotPlasmo) + const dotPlasmoDirectory = resolve(projectDirectory, ".plasmo") const cacheDirectory = resolve(dotPlasmoDirectory, "cache") diff --git a/cli/plasmo/src/features/manifest-factory/create-manifest.ts b/cli/plasmo/src/features/manifest-factory/create-manifest.ts index ac066ff7a..04f33874b 100644 --- a/cli/plasmo/src/features/manifest-factory/create-manifest.ts +++ b/cli/plasmo/src/features/manifest-factory/create-manifest.ts @@ -21,21 +21,18 @@ export async function createManifest(bundleConfig: PlasmoBundleConfig) { const contentIndex = contentIndexList.find(existsSync) const backgroundIndex = backgroundIndexList.find(existsSync) - const hasEntrypoints = await Promise.all([ - plasmoManifest.scaffolder.initTemplateFiles("popup"), - plasmoManifest.scaffolder.initTemplateFiles("options"), - plasmoManifest.scaffolder.initTemplateFiles("newtab"), - plasmoManifest.scaffolder.initTemplateFiles("devtools"), + const initResults = await Promise.all([ + plasmoManifest.scaffolder.init(), plasmoManifest.toggleContentScript(contentIndex, true), plasmoManifest.toggleBackground(backgroundIndex, true), plasmoManifest.addContentScriptsDirectory(), plasmoManifest.addTabsDirectory() ]) + const hasEntrypoints = initResults.flat() + if (!hasEntrypoints.includes(true)) { - wLog( - "Unable to find any entrypoints. You may end up with an empty extension..." - ) + wLog("Unable to find any entry files, the extension might be empty") } const [hasPopup, hasOptions, hasNewtab, hasDevtools] = hasEntrypoints @@ -43,8 +40,8 @@ export async function createManifest(bundleConfig: PlasmoBundleConfig) { plasmoManifest .togglePopup(hasPopup) .toggleOptions(hasOptions) - .toggleDevtools(hasDevtools) .toggleNewtab(hasNewtab) + .toggleDevtools(hasDevtools) await plasmoManifest.write(true) diff --git a/cli/plasmo/src/features/manifest-factory/scaffolder.ts b/cli/plasmo/src/features/manifest-factory/scaffolder.ts index 8fedd3b1f..4d4f3f4a9 100644 --- a/cli/plasmo/src/features/manifest-factory/scaffolder.ts +++ b/cli/plasmo/src/features/manifest-factory/scaffolder.ts @@ -1,5 +1,5 @@ import { existsSync } from "fs" -import { ensureDir } from "fs-extra" +import { copy, ensureDir } from "fs-extra" import { readFile, writeFile } from "fs/promises" import { ParsedPath, join, relative, resolve } from "path" @@ -31,7 +31,33 @@ export class Scaffolder { this.#plasmoManifest = plasmoManifest } - initTemplateFiles = async (uiPageName: ExtensionUIPage) => { + async init() { + const [_, ...uiPagesResult] = await Promise.all([ + this.#copyStaticCommon(), + this.#initUiPageTemplate("popup"), + this.#initUiPageTemplate("options"), + this.#initUiPageTemplate("newtab"), + this.#initUiPageTemplate("devtools") + ]) + + return uiPagesResult + } + + #copyStaticCommon = async () => { + const templateCommonDirectory = resolve( + this.#plasmoManifest.templatePath.staticTemplatePath, + "common" + ) + + const staticCommonDirectory = resolve( + this.commonPath.staticDirectory, + "common" + ) + + return copy(templateCommonDirectory, staticCommonDirectory) + } + + #initUiPageTemplate = async (uiPageName: ExtensionUIPage) => { vLog(`Creating static templates for ${uiPageName}`) const indexList = this.projectPath[`${uiPageName}IndexList`] diff --git a/cli/plasmo/src/type.ts b/cli/plasmo/src/type.ts index 6a0eb594f..609f6539f 100644 --- a/cli/plasmo/src/type.ts +++ b/cli/plasmo/src/type.ts @@ -5,34 +5,55 @@ export type PlasmoContentScript = Omit, "js"> type Async = Promise | T -type Getter = () => Async +type Getter = (props?: P) => Async type GetHtmlElement = Getter -export type PlasmoGetRootContainer = GetHtmlElement +export type PlasmoCSUIAnchor = { + element: Element + type: "overlay" | "inline" +} + +export type PlasmoGetRootContainer = Getter + export type PlasmoGetOverlayAnchor = GetHtmlElement +export type PlasmoGetOverlayAnchorList = Getter -export type PlasmoGetInlineAnchor = () => HTMLElement | null +export type PlasmoGetInlineAnchor = GetHtmlElement +export type PlasmoGetInlineAnchorList = Getter export type PlasmoCSUIMountState = { document: Document observer: MutationObserver | null - shadowHost: Element | null - inlineAnchor: Element | null -} -export type PlasmoMountShadowHost = ( - mountState: PlasmoCSUIMountState -) => Async + isMounting: boolean + isMutated: boolean + /** + * Used to quickly check if element is already mounted + */ + hostSet: Set + + /** + * Used to add more metadata to the host Set + */ + hostMap: WeakMap +} -export type PlasmoRender = ( - createRootContainer: GetHtmlElement, - MountContainer: () => JSX.Element | HTMLElement +export type PlasmoMountShadowHost = (props: { + observer: MutationObserver | null + shadowHost: Element + anchor: PlasmoCSUIAnchor +}) => Async + +export type PlasmoRender = ( + createRootContainer?: PlasmoGetRootContainer, + MountContainer?: (_props: PT) => JSX.Element | HTMLElement, + anchor?: PlasmoCSUIAnchor ) => Async -export type PlasmoGetShadowHostId = Getter +export type PlasmoGetShadowHostId = Getter -export type PlasmoGetStyle = Getter +export type PlasmoGetStyle = Getter export type PlasmoWatchOverlayAnchor = ( updatePosition: () => Promise @@ -48,7 +69,10 @@ export type PlasmoCSUI = { getShadowHostId: PlasmoGetShadowHostId getOverlayAnchor: PlasmoGetOverlayAnchor + getOverlayAnchorList: PlasmoGetOverlayAnchorList + getInlineAnchor: PlasmoGetInlineAnchor + getInlineAnchorList: PlasmoGetInlineAnchorList getRootContainer: PlasmoGetRootContainer diff --git a/cli/plasmo/templates/static/common/csui.ts b/cli/plasmo/templates/static/common/csui.ts new file mode 100644 index 000000000..c646a41c3 --- /dev/null +++ b/cli/plasmo/templates/static/common/csui.ts @@ -0,0 +1,194 @@ +import type { PlasmoCSUI, PlasmoCSUIAnchor, PlasmoCSUIMountState } from "~type" + +export const mountState: PlasmoCSUIMountState = { + document: document || window.document, + observer: null, + + isMounting: false, + isMutated: false, + + hostSet: new Set(), + hostMap: new WeakMap() +} + +export const isMounted = (el: Element | null) => + el?.id + ? !!document.getElementById(el.id) + : el?.getRootNode({ composed: true }) === mountState.document + +async function createShadowRoot(anchor: PlasmoCSUIAnchor, Mount: PlasmoCSUI) { + const shadowHost = document.createElement("div") + + if (typeof Mount.getShadowHostId === "function") { + shadowHost.id = await Mount.getShadowHostId(anchor) + } + + const shadowRoot = + typeof Mount.createShadowRoot === "function" + ? await Mount.createShadowRoot(shadowHost) + : shadowHost.attachShadow({ mode: "open" }) + + if (typeof Mount.mountShadowHost === "function") { + await Mount.mountShadowHost({ + shadowHost, + anchor, + observer: mountState.observer + }) + } else if (anchor.type === "inline") { + anchor.element.insertAdjacentElement("afterend", shadowHost) + } else { + document.body.insertAdjacentElement("beforebegin", shadowHost) + } + + if (typeof Mount.getStyle === "function") { + shadowRoot.appendChild(await Mount.getStyle(anchor)) + } + + mountState.hostSet.add(shadowHost) + mountState.hostMap.set(shadowHost, anchor) + + return shadowRoot +} + +export async function createShadowContainer( + anchor: PlasmoCSUIAnchor, + Mount: PlasmoCSUI +) { + const shadowRoot = await createShadowRoot(anchor, Mount) + + const container = document.createElement("div") + container.id = "plasmo-shadow-container" + container.style.cssText = ` + z-index: 2147483647; + position: ${anchor.type === "inline" ? "relative" : "absolute"}; + ` + + shadowRoot.appendChild(container) + return container +} + +export function createAnchorObserver( + Mount: PlasmoCSUI, + render: (anchor?: PlasmoCSUIAnchor) => void +) { + const hasInlineAnchor = typeof Mount.getInlineAnchor === "function" + const hasOverlayAnchor = typeof Mount.getOverlayAnchor === "function" + + const hasInlineAnchorList = typeof Mount.getInlineAnchorList === "function" + const hasOverlayAnchorList = typeof Mount.getOverlayAnchorList === "function" + + const shouldObserve = + hasInlineAnchor || + hasOverlayAnchor || + hasInlineAnchorList || + hasOverlayAnchorList + + if (!shouldObserve) { + return null + } + + async function mountAnchors() { + mountState.isMounting = true + + const mountedOverlayAnchorSet = new WeakSet() + const mountedInlineAnchorSet = new WeakSet() + + // Go through mounted sets and check if they are still mounted + for (const el of mountState.hostSet) { + if (isMounted(el)) { + const anchor = mountState.hostMap.get(el) + if (!!anchor) { + if (anchor.type === "inline") { + mountedInlineAnchorSet.add(anchor.element) + } else if (anchor.type === "overlay") { + mountedOverlayAnchorSet.add(anchor.element) + } + } + } else { + mountState.hostSet.delete(el) + } + } + + if (hasInlineAnchor) { + const inlineAnchor = await Mount.getInlineAnchor() + if (inlineAnchor && !mountedInlineAnchorSet.has(inlineAnchor)) { + render({ + type: "inline", + element: inlineAnchor + }) + } + } + + if (hasInlineAnchorList) { + const inlineAnchorList = await Mount.getInlineAnchorList() + + if (inlineAnchorList!.length > 0) { + inlineAnchorList!.forEach((inlineAnchor) => { + if ( + inlineAnchor instanceof HTMLElement && + !mountedInlineAnchorSet.has(inlineAnchor) + ) { + render({ + element: inlineAnchor, + type: "inline" + }) + } + }) + } + } + + if (hasOverlayAnchor) { + const overlayAnchor = await Mount.getOverlayAnchor() + if (overlayAnchor && !mountedOverlayAnchorSet.has(overlayAnchor)) { + render({ + element: overlayAnchor, + type: "overlay" + }) + } + } + + if (hasOverlayAnchorList) { + const overlayAnchorList = await Mount.getOverlayAnchorList() + + if (overlayAnchorList!.length > 0) { + overlayAnchorList!.forEach((overlayAnchor) => { + if ( + overlayAnchor instanceof HTMLElement && + !mountedOverlayAnchorSet.has(overlayAnchor) + ) { + render({ + element: overlayAnchor, + type: "overlay" + }) + } + }) + } + } + + if (mountState.isMutated) { + mountState.isMutated = false + await mountAnchors() + } + mountState.isMounting = false + } + + const start = () => { + mountState.observer = new MutationObserver(() => { + if (mountState.isMounting) { + mountState.isMutated = true + return + } + mountAnchors() + }) + + // Need to watch the subtree for shadowDOM + mountState.observer.observe(document.body, { + childList: true, + subtree: true + }) + } + + return { + start + } +} diff --git a/cli/plasmo/templates/static/react18/content-script-ui-mount.tsx b/cli/plasmo/templates/static/react18/content-script-ui-mount.tsx index 537aa1411..573c7479a 100644 --- a/cli/plasmo/templates/static/react18/content-script-ui-mount.tsx +++ b/cli/plasmo/templates/static/react18/content-script-ui-mount.tsx @@ -5,25 +5,17 @@ import { createRoot } from "react-dom/client" // @ts-ignore import * as RawMount from "__plasmo_mount_content_script__" -import type { PlasmoCSUI, PlasmoCSUIMountState } from "../../../src/type" +import { + createAnchorObserver, + createShadowContainer +} from "@plasmo-static-common/csui" + +import type { PlasmoCSUI, PlasmoCSUIAnchor } from "~type" // Escape parcel's static analyzer const Mount = RawMount as PlasmoCSUI -const mountState: PlasmoCSUIMountState = { - document: document || window.document, - observer: null, - shadowHost: null, - // cached anchors: - inlineAnchor: null -} - -const isMounted = (el: Element | null) => - el?.id - ? !!document.getElementById(el.id) - : el?.getRootNode({ composed: true }) === mountState.document - -const MountContainer = () => { +const MountContainer = (props: any) => { const [top, setTop] = React.useState(0) const [left, setLeft] = React.useState(0) @@ -53,12 +45,8 @@ const MountContainer = () => { updatePosition() if (typeof Mount.watchOverlayAnchor === "function") { - Mount.watchOverlayAnchor(updatePosition) + return Mount.watchOverlayAnchor(updatePosition) } - - window.addEventListener("scroll", updatePosition) - - return () => window.removeEventListener("scroll", updatePosition) }, []) return ( @@ -70,90 +58,35 @@ const MountContainer = () => { top, left }}> - + ) } -async function createShadowContainer() { - const container = document.createElement("div") - - container.id = "plasmo-shadow-container" - - const isInline = !!mountState.inlineAnchor - - container.style.cssText = ` - z-index: 2147483647; - position: ${isInline ? "relative" : "absolute"}; - ` - - const shadowHost = document.createElement("div") - - if (typeof Mount.getShadowHostId === "function") { - shadowHost.id = await Mount.getShadowHostId() - } - - const shadowRoot = - typeof Mount.createShadowRoot === "function" - ? await Mount.createShadowRoot(shadowHost) - : shadowHost.attachShadow({ mode: "open" }) - - mountState.shadowHost = shadowHost - - if (typeof Mount.mountShadowHost === "function") { - await Mount.mountShadowHost(mountState) - } else if (isInline) { - mountState.inlineAnchor?.insertAdjacentElement("afterend", shadowHost) - } else { - document.body.insertAdjacentElement("beforebegin", shadowHost) - } - - if (typeof Mount.getStyle === "function") { - shadowRoot.appendChild(await Mount.getStyle()) - } - - shadowRoot.appendChild(container) - return container +async function getRootContainer(anchor: PlasmoCSUIAnchor) { + return createShadowContainer(anchor, Mount) } const createRootContainer = typeof Mount.getRootContainer === "function" ? Mount.getRootContainer - : createShadowContainer - -const render = async () => { - const rootContainer = await createRootContainer() - const root = createRoot(rootContainer) - root.render() -} + : getRootContainer -const startObserver = () => { - mountState.observer = new MutationObserver(() => { - // This should be O(1) if shadowHost cached its root. - // Otherwise, it's O(n) where n is how deep it's nested within the DOM. - if (isMounted(mountState.shadowHost)) { - return - } - const inlineAnchor = Mount.getInlineAnchor() - if (!inlineAnchor) { - return - } +const render = + typeof Mount.render === "function" + ? (anchor?: PlasmoCSUIAnchor) => + Mount.render(createRootContainer, MountContainer, anchor) + : async (anchor?: PlasmoCSUIAnchor) => { + const rootContainer = await createRootContainer(anchor) + const root = createRoot(rootContainer) - mountState.inlineAnchor = inlineAnchor - render() - }) + root.render() + } - // Need to watch the subtree for shadowDOM - mountState.observer.observe(document.body, { - childList: true, - subtree: true - }) -} +const observer = createAnchorObserver(Mount, render) -if (typeof Mount.render === "function") { - Mount.render(createRootContainer, MountContainer) -} else if (typeof Mount.getInlineAnchor === "function") { - startObserver() +if (!!observer) { + observer.start() } else { render() } diff --git a/cli/plasmo/templates/static/svelte3/content-script-ui-mount.ts b/cli/plasmo/templates/static/svelte3/content-script-ui-mount.ts index 03a4c4f19..33405be23 100644 --- a/cli/plasmo/templates/static/svelte3/content-script-ui-mount.ts +++ b/cli/plasmo/templates/static/svelte3/content-script-ui-mount.ts @@ -2,7 +2,7 @@ // @ts-ignore import * as RawMount from "__plasmo_mount_content_script__" -import type { PlasmoCSUI, PlasmoCSUIMountState } from "../../../src/type" +import type { PlasmoCSUI, PlasmoCSUIMountState } from "~type" // Escape parcel's static analyzer const Mount = RawMount as PlasmoCSUI diff --git a/cli/plasmo/templates/static/vue3/content-script-ui-mount.ts b/cli/plasmo/templates/static/vue3/content-script-ui-mount.ts index 1a8e026e8..23cfe972a 100644 --- a/cli/plasmo/templates/static/vue3/content-script-ui-mount.ts +++ b/cli/plasmo/templates/static/vue3/content-script-ui-mount.ts @@ -5,7 +5,7 @@ import { createApp } from "vue" // @ts-ignore import RawMount from "__plasmo_mount_content_script__" -import type { PlasmoCSUI, PlasmoCSUIMountState } from "../../../src/type" +import type { PlasmoCSUI, PlasmoCSUIMountState } from "~type" // Escape parcel's static analyzer const Mount = RawMount.plasmo as PlasmoCSUI diff --git a/cli/plasmo/tsconfig.json b/cli/plasmo/tsconfig.json index 57e8ea89f..118a0a61c 100644 --- a/cli/plasmo/tsconfig.json +++ b/cli/plasmo/tsconfig.json @@ -1,10 +1,20 @@ { "extends": "@plasmo/config/ts/cli.json", - "include": ["src/**/*.ts", "./index.d.ts"], - "exclude": ["dist", "node_modules", "templates"], + "include": [ + "src/**/*.ts", + "./index.d.ts", + "templates/**/*.ts", + "templates/**/*.tsx" + ], + "exclude": ["dist", "node_modules"], "compilerOptions": { "outDir": "dist", "baseUrl": ".", - "lib": ["es2022", "dom"] + "lib": ["es2022", "dom"], + "jsx": "preserve", + "paths": { + "~*": ["./src/*"], + "@plasmo-static-common/*": ["./templates/static/common/*"] + } } } diff --git a/examples b/examples index 18b4aee61..6058c8e74 160000 --- a/examples +++ b/examples @@ -1 +1 @@ -Subproject commit 18b4aee61de8770ae415e4780d8974bd156bf680 +Subproject commit 6058c8e74771223c037e3cf316d3a0e2819a1483 diff --git a/packages/config b/packages/config index 534ce1576..5018afcb9 160000 --- a/packages/config +++ b/packages/config @@ -1 +1 @@ -Subproject commit 534ce1576460d17e252b5a60a69a4ef15e3a3bdc +Subproject commit 5018afcb965dc26f9aa2f382ac86637b9d03f061 diff --git a/packages/parcel-resolver/package.json b/packages/parcel-resolver/package.json index 281a5cca7..59ab01898 100644 --- a/packages/parcel-resolver/package.json +++ b/packages/parcel-resolver/package.json @@ -1,6 +1,6 @@ { "name": "@plasmohq/parcel-resolver", - "version": "0.5.4", + "version": "0.6.0", "description": "Plasmo Parcel Resolver", "files": [ "dist" diff --git a/packages/parcel-resolver/src/handle-absolute-root.ts b/packages/parcel-resolver/src/handle-absolute-root.ts new file mode 100644 index 000000000..1581f8fdb --- /dev/null +++ b/packages/parcel-resolver/src/handle-absolute-root.ts @@ -0,0 +1,39 @@ +import { extname, resolve } from "path" + +import { + ResolverProps, + ResolverResult, + relevantExtensionList, + resolveSourceIndex +} from "./shared" + +export async function handleAbsoluteRoot({ + specifier, + dependency +}: ResolverProps): Promise { + if (specifier[0] !== "/") { + return null + } + + const absoluteBaseFile = resolve( + process.env.PLASMO_PROJECT_DIR, + specifier.slice(1) + ) + + const importExt = extname(absoluteBaseFile) + + if (importExt.length > 0) { + return { + filePath: absoluteBaseFile + } + } + + const parentExt = extname(dependency.resolveFrom) + + const checkingExts = [ + parentExt, + ...relevantExtensionList.filter((ext) => ext !== parentExt) + ] + + return resolveSourceIndex(absoluteBaseFile, checkingExts) +} diff --git a/packages/parcel-resolver/src/handle-module-exports.ts b/packages/parcel-resolver/src/handle-module-exports.ts new file mode 100644 index 000000000..fd31beb76 --- /dev/null +++ b/packages/parcel-resolver/src/handle-module-exports.ts @@ -0,0 +1,22 @@ +import type { ResolverProps, ResolverResult } from "./shared" + +export async function handleModuleExport({ + specifier, + dependency +}: ResolverProps): Promise { + try { + const segments = specifier.split("/") + + if (segments.length > 2) { + const filePath = require.resolve(specifier, { + paths: [dependency.resolveFrom] + }) + + return { + filePath + } + } + } catch {} + + return null +} diff --git a/packages/parcel-resolver/src/handle-plasmo-internal.ts b/packages/parcel-resolver/src/handle-plasmo-internal.ts new file mode 100644 index 000000000..e90c54fc6 --- /dev/null +++ b/packages/parcel-resolver/src/handle-plasmo-internal.ts @@ -0,0 +1,28 @@ +import { resolve } from "path" + +import { + ResolverProps, + ResolverResult, + resolveSourceIndex, + state +} from "./shared" + +const resolveByPrefix = (specifier = "", prefix = "", prefixPath = "") => { + if (!specifier.startsWith(prefix)) { + return null + } + + const [_, specifierPath] = specifier.split(prefix) + + return resolveSourceIndex(resolve(prefixPath, specifierPath)) +} + +export async function handlePlasmoInternal({ + specifier +}: ResolverProps): Promise { + return resolveByPrefix( + specifier, + "@plasmo-static-common/", + resolve(state.dotPlasmoDirectory, "static", "common") + ) +} diff --git a/packages/parcel-resolver/src/handle-tilde-src.ts b/packages/parcel-resolver/src/handle-tilde-src.ts index 636650170..2e46fcdee 100644 --- a/packages/parcel-resolver/src/handle-tilde-src.ts +++ b/packages/parcel-resolver/src/handle-tilde-src.ts @@ -6,7 +6,7 @@ import { ResolverResult, relevantExtensionList, relevantExtensionSet, - state + resolveSourceIndex } from "./shared" export async function handleTildeSrc({ @@ -17,10 +17,14 @@ export async function handleTildeSrc({ return null } - const absoluteBaseFile = resolve(state.srcDir, specifier.slice(1)) + const absoluteBaseFile = resolve( + process.env.PLASMO_SRC_DIR, + specifier.slice(1) + ) const importExt = extname(absoluteBaseFile) + // TODO: Potentially resolve other type of files (less import etc...) that Parcel doesn't account for if (importExt.length > 0 && relevantExtensionSet.has(importExt as any)) { return { filePath: absoluteBaseFile @@ -36,20 +40,7 @@ export async function handleTildeSrc({ ...relevantExtensionList.filter((ext) => ext !== parentExt) ] - const potentialFiles = checkingExts.flatMap((ext) => [ - `${absoluteBaseFile}${ext}`, - resolve(absoluteBaseFile, `index${ext}`) - ]) - // console.log(`tildeSrc: ${potentialFiles}`) - for (const file of potentialFiles) { - try { - if (statSync(file).isFile()) { - return { filePath: file } - } - } catch {} - } - - return null + return resolveSourceIndex(absoluteBaseFile, checkingExts) } diff --git a/packages/parcel-resolver/src/index.ts b/packages/parcel-resolver/src/index.ts index 1200bb801..8551ed0ca 100644 --- a/packages/parcel-resolver/src/index.ts +++ b/packages/parcel-resolver/src/index.ts @@ -1,5 +1,8 @@ import { Resolver } from "@parcel/plugin" +import { handleAbsoluteRoot } from "./handle-absolute-root" +import { handleModuleExport } from "./handle-module-exports" +import { handlePlasmoInternal } from "./handle-plasmo-internal" import { handleRemoteCaching } from "./handle-remote-caching" import { handleTildeSrc } from "./handle-tilde-src" import { initializeState } from "./shared" @@ -8,30 +11,13 @@ export default new Resolver({ async resolve(props) { await initializeState(props) - const remoteCacheResult = await handleRemoteCaching(props) - if (remoteCacheResult !== null) { - return remoteCacheResult - } - - const tildeSrcResult = await handleTildeSrc(props) - if (tildeSrcResult !== null) { - return tildeSrcResult - } - - try { - const segments = props.specifier.split("/") - - if (segments.length > 2) { - const filePath = require.resolve(props.specifier, { - paths: [props.dependency.resolveFrom] - }) - - return { - filePath - } - } - } catch {} - - return null + return ( + (await handlePlasmoInternal(props)) || + (await handleRemoteCaching(props)) || + (await handleTildeSrc(props)) || + (await handleAbsoluteRoot(props)) || + (await handleModuleExport(props)) || + null + ) } }) diff --git a/packages/parcel-resolver/src/shared.ts b/packages/parcel-resolver/src/shared.ts index 93b5d026c..561a75cce 100644 --- a/packages/parcel-resolver/src/shared.ts +++ b/packages/parcel-resolver/src/shared.ts @@ -1,5 +1,7 @@ import type { Resolver } from "@parcel/plugin" +import { statSync } from "fs-extra" import type { Got } from "got" +import { resolve } from "path" export const relevantExtensionList = [ ".ts", @@ -19,13 +21,40 @@ export type ResolverProps = Parameters[0] export const state = { got: null as Got, - srcDir: null as string + dotPlasmoDirectory: null as string } export const initializeState = async (props: ResolverProps) => { if (state.got === null) { state.got = (await import("got")).default } + if (!state.dotPlasmoDirectory) { + state.dotPlasmoDirectory = resolve( + process.env.PLASMO_PROJECT_DIR, + ".plasmo" + ) + } +} + +/** + * Look for source code file (crawl index) + */ +export const resolveSourceIndex = async ( + absoluteBaseFile: string, + checkingExts = relevantExtensionList as readonly string[] +) => { + const potentialFiles = checkingExts.flatMap((ext) => [ + `${absoluteBaseFile}${ext}`, + resolve(absoluteBaseFile, `index${ext}`) + ]) + + for (const file of potentialFiles) { + try { + if (statSync(file).isFile()) { + return { filePath: file } + } + } catch {} + } - state.srcDir = process.env.PLASMO_SRC_DIR + return null } From ff7938fbd481812478030c3e1721c8b8ed608ecc Mon Sep 17 00:00:00 2001 From: Louis <6723574+louisgv@users.noreply.github.com> Date: Sat, 15 Oct 2022 00:00:11 -0400 Subject: [PATCH 02/12] bump config --- packages/parcel-config/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/parcel-config/package.json b/packages/parcel-config/package.json index 6e7b1d23f..f2837e5c2 100644 --- a/packages/parcel-config/package.json +++ b/packages/parcel-config/package.json @@ -1,6 +1,6 @@ { "name": "@plasmohq/parcel-config", - "version": "0.17.0", + "version": "0.18.0", "license": "MIT", "repository": { "type": "git", From 5c7c78615712bd4563bf3cea5c5b061a33bb0ee6 Mon Sep 17 00:00:00 2001 From: Louis <6723574+louisgv@users.noreply.github.com> Date: Sat, 15 Oct 2022 00:03:46 -0400 Subject: [PATCH 03/12] fix absolute path spec --- packages/parcel-resolver/src/handle-absolute-root.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/parcel-resolver/src/handle-absolute-root.ts b/packages/parcel-resolver/src/handle-absolute-root.ts index 1581f8fdb..bc9a5b240 100644 --- a/packages/parcel-resolver/src/handle-absolute-root.ts +++ b/packages/parcel-resolver/src/handle-absolute-root.ts @@ -1,4 +1,4 @@ -import { extname, resolve } from "path" +import { extname, isAbsolute, resolve } from "path" import { ResolverProps, @@ -11,7 +11,7 @@ export async function handleAbsoluteRoot({ specifier, dependency }: ResolverProps): Promise { - if (specifier[0] !== "/") { + if (specifier[0] !== "/" || isAbsolute(specifier)) { return null } From f44041abd3d67a3ca9bec61b27d0bec47768dc39 Mon Sep 17 00:00:00 2001 From: Louis <6723574+louisgv@users.noreply.github.com> Date: Sun, 16 Oct 2022 04:30:50 -0400 Subject: [PATCH 04/12] Single anchor working as before --- cli/plasmo/src/type.ts | 5 +- cli/plasmo/templates/static/common/csui.ts | 75 ++++++++++--------- .../react18/content-script-ui-mount.tsx | 27 +++---- packages/parcel-resolver/package.json | 1 + .../src/handle-plasmo-internal.ts | 1 + packages/parcel-resolver/src/shared.ts | 10 ++- pnpm-lock.yaml | 15 +++- 7 files changed, 77 insertions(+), 57 deletions(-) diff --git a/cli/plasmo/src/type.ts b/cli/plasmo/src/type.ts index 609f6539f..927926998 100644 --- a/cli/plasmo/src/type.ts +++ b/cli/plasmo/src/type.ts @@ -14,7 +14,10 @@ export type PlasmoCSUIAnchor = { type: "overlay" | "inline" } -export type PlasmoGetRootContainer = Getter +export type PlasmoGetRootContainer = ( + anchor: PlasmoCSUIAnchor, + mountState: PlasmoCSUIMountState +) => Async export type PlasmoGetOverlayAnchor = GetHtmlElement export type PlasmoGetOverlayAnchorList = Getter diff --git a/cli/plasmo/templates/static/common/csui.ts b/cli/plasmo/templates/static/common/csui.ts index c646a41c3..923a7b780 100644 --- a/cli/plasmo/templates/static/common/csui.ts +++ b/cli/plasmo/templates/static/common/csui.ts @@ -1,24 +1,15 @@ import type { PlasmoCSUI, PlasmoCSUIAnchor, PlasmoCSUIMountState } from "~type" -export const mountState: PlasmoCSUIMountState = { - document: document || window.document, - observer: null, - - isMounting: false, - isMutated: false, - - hostSet: new Set(), - hostMap: new WeakMap() -} - -export const isMounted = (el: Element | null) => - el?.id - ? !!document.getElementById(el.id) - : el?.getRootNode({ composed: true }) === mountState.document - -async function createShadowRoot(anchor: PlasmoCSUIAnchor, Mount: PlasmoCSUI) { +async function createShadowRoot( + anchor: PlasmoCSUIAnchor, + Mount: PlasmoCSUI, + mountState?: PlasmoCSUIMountState +) { const shadowHost = document.createElement("div") + mountState?.hostSet.add(shadowHost) + mountState?.hostMap.set(shadowHost, anchor) + if (typeof Mount.getShadowHostId === "function") { shadowHost.id = await Mount.getShadowHostId(anchor) } @@ -32,7 +23,7 @@ async function createShadowRoot(anchor: PlasmoCSUIAnchor, Mount: PlasmoCSUI) { await Mount.mountShadowHost({ shadowHost, anchor, - observer: mountState.observer + observer: mountState?.observer }) } else if (anchor.type === "inline") { anchor.element.insertAdjacentElement("afterend", shadowHost) @@ -44,33 +35,44 @@ async function createShadowRoot(anchor: PlasmoCSUIAnchor, Mount: PlasmoCSUI) { shadowRoot.appendChild(await Mount.getStyle(anchor)) } - mountState.hostSet.add(shadowHost) - mountState.hostMap.set(shadowHost, anchor) - return shadowRoot } export async function createShadowContainer( anchor: PlasmoCSUIAnchor, - Mount: PlasmoCSUI + Mount: PlasmoCSUI, + mountState?: PlasmoCSUIMountState ) { - const shadowRoot = await createShadowRoot(anchor, Mount) + const shadowRoot = await createShadowRoot(anchor, Mount, mountState) const container = document.createElement("div") container.id = "plasmo-shadow-container" container.style.cssText = ` - z-index: 2147483647; - position: ${anchor.type === "inline" ? "relative" : "absolute"}; - ` + z-index: 2147483647; + position: ${anchor.type === "inline" ? "relative" : "absolute"}; + ` shadowRoot.appendChild(container) return container } -export function createAnchorObserver( - Mount: PlasmoCSUI, - render: (anchor?: PlasmoCSUIAnchor) => void -) { +export function createAnchorObserver(Mount: PlasmoCSUI) { + const mountState: PlasmoCSUIMountState = { + document: document || window.document, + observer: null, + + isMounting: false, + isMutated: false, + + hostSet: new Set(), + hostMap: new WeakMap() + } + + const isMounted = (el: Element | null) => + el?.id + ? !!document.getElementById(el.id) + : el?.getRootNode({ composed: true }) === mountState.document + const hasInlineAnchor = typeof Mount.getInlineAnchor === "function" const hasOverlayAnchor = typeof Mount.getOverlayAnchor === "function" @@ -87,11 +89,11 @@ export function createAnchorObserver( return null } - async function mountAnchors() { + async function mountAnchors(render: (anchor?: PlasmoCSUIAnchor) => void) { mountState.isMounting = true - const mountedOverlayAnchorSet = new WeakSet() const mountedInlineAnchorSet = new WeakSet() + const mountedOverlayAnchorSet = new WeakSet() // Go through mounted sets and check if they are still mounted for (const el of mountState.hostSet) { @@ -167,18 +169,18 @@ export function createAnchorObserver( if (mountState.isMutated) { mountState.isMutated = false - await mountAnchors() + await mountAnchors(render) } mountState.isMounting = false } - const start = () => { + const start = (render: (anchor?: PlasmoCSUIAnchor) => void) => { mountState.observer = new MutationObserver(() => { if (mountState.isMounting) { mountState.isMutated = true return } - mountAnchors() + mountAnchors(render) }) // Need to watch the subtree for shadowDOM @@ -189,6 +191,7 @@ export function createAnchorObserver( } return { - start + start, + mountState } } diff --git a/cli/plasmo/templates/static/react18/content-script-ui-mount.tsx b/cli/plasmo/templates/static/react18/content-script-ui-mount.tsx index 573c7479a..a5657a32e 100644 --- a/cli/plasmo/templates/static/react18/content-script-ui-mount.tsx +++ b/cli/plasmo/templates/static/react18/content-script-ui-mount.tsx @@ -1,3 +1,9 @@ +// prettier-sort-ignore +import { + createAnchorObserver, + createShadowContainer +} from "@plasmo-static-common/csui" + import React from "react" import { createRoot } from "react-dom/client" @@ -5,12 +11,7 @@ import { createRoot } from "react-dom/client" // @ts-ignore import * as RawMount from "__plasmo_mount_content_script__" -import { - createAnchorObserver, - createShadowContainer -} from "@plasmo-static-common/csui" - -import type { PlasmoCSUI, PlasmoCSUIAnchor } from "~type" +import type { PlasmoCSUI, PlasmoCSUIAnchor, PlasmoCSUIMountState } from "~type" // Escape parcel's static analyzer const Mount = RawMount as PlasmoCSUI @@ -63,14 +64,12 @@ const MountContainer = (props: any) => { ) } -async function getRootContainer(anchor: PlasmoCSUIAnchor) { - return createShadowContainer(anchor, Mount) -} +const observer = createAnchorObserver(Mount) -const createRootContainer = +const createRootContainer = (anchor: PlasmoCSUIAnchor) => typeof Mount.getRootContainer === "function" - ? Mount.getRootContainer - : getRootContainer + ? Mount.getRootContainer(anchor, observer?.mountState) + : createShadowContainer(anchor, Mount, observer?.mountState) const render = typeof Mount.render === "function" @@ -83,10 +82,8 @@ const render = root.render() } -const observer = createAnchorObserver(Mount, render) - if (!!observer) { - observer.start() + observer.start(render) } else { render() } diff --git a/packages/parcel-resolver/package.json b/packages/parcel-resolver/package.json index 59ab01898..fa63005f5 100644 --- a/packages/parcel-resolver/package.json +++ b/packages/parcel-resolver/package.json @@ -27,6 +27,7 @@ }, "dependencies": { "@parcel/core": "2.7.0", + "@parcel/types": "2.7.0", "@parcel/hash": "2.7.0", "@parcel/plugin": "2.7.0", "got": "12.5.1" diff --git a/packages/parcel-resolver/src/handle-plasmo-internal.ts b/packages/parcel-resolver/src/handle-plasmo-internal.ts index e90c54fc6..ff662ac8b 100644 --- a/packages/parcel-resolver/src/handle-plasmo-internal.ts +++ b/packages/parcel-resolver/src/handle-plasmo-internal.ts @@ -3,6 +3,7 @@ import { resolve } from "path" import { ResolverProps, ResolverResult, + relevantExtensionList, resolveSourceIndex, state } from "./shared" diff --git a/packages/parcel-resolver/src/shared.ts b/packages/parcel-resolver/src/shared.ts index 561a75cce..dac8c33c3 100644 --- a/packages/parcel-resolver/src/shared.ts +++ b/packages/parcel-resolver/src/shared.ts @@ -1,4 +1,5 @@ import type { Resolver } from "@parcel/plugin" +import type { ResolveResult } from "@parcel/types" import { statSync } from "fs-extra" import type { Got } from "got" import { resolve } from "path" @@ -15,7 +16,7 @@ export const relevantExtensionSet = new Set(relevantExtensionList) type ResolveFx = ConstructorParameters[0]["resolve"] -export type ResolverResult = ReturnType +export type ResolverResult = ResolveResult export type ResolverProps = Parameters[0] @@ -41,8 +42,9 @@ export const initializeState = async (props: ResolverProps) => { */ export const resolveSourceIndex = async ( absoluteBaseFile: string, - checkingExts = relevantExtensionList as readonly string[] -) => { + checkingExts = relevantExtensionList as readonly string[], + opts = {} as Partial +): Promise => { const potentialFiles = checkingExts.flatMap((ext) => [ `${absoluteBaseFile}${ext}`, resolve(absoluteBaseFile, `index${ext}`) @@ -51,7 +53,7 @@ export const resolveSourceIndex = async ( for (const file of potentialFiles) { try { if (statSync(file).isFile()) { - return { filePath: file } + return { filePath: file, ...opts } } } catch {} } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 53b796a54..4e34fe98e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1375,6 +1375,7 @@ importers: '@parcel/core': 2.7.0 '@parcel/hash': 2.7.0 '@parcel/plugin': 2.7.0 + '@parcel/types': 2.7.0 '@plasmo/config': workspace:* got: 12.5.1 tsup: 6.2.3 @@ -1382,6 +1383,7 @@ importers: '@parcel/core': 2.7.0 '@parcel/hash': 2.7.0 '@parcel/plugin': 2.7.0_@parcel+core@2.7.0 + '@parcel/types': 2.7.0_@parcel+core@2.7.0 got: 12.5.1 devDependencies: '@plasmo/config': link:../config @@ -4149,6 +4151,17 @@ packages: - '@parcel/core' dev: false + /@parcel/types/2.7.0: + resolution: {integrity: sha512-+dhXVUnseTCpJvBTGMp0V6X13z6O/A/+CUtwEpMGZ8XSmZ4Gk44GvaTiBOp0bJpWG4fvCKp+UmC8PYbrDiiziw==} + dependencies: + '@parcel/cache': 2.7.0_@parcel+core@2.7.0 + '@parcel/diagnostic': 2.7.0 + '@parcel/fs': 2.7.0_@parcel+core@2.7.0 + '@parcel/package-manager': 2.7.0_@parcel+core@2.7.0 + '@parcel/source-map': 2.1.1 + '@parcel/workers': 2.7.0_@parcel+core@2.7.0 + utility-types: 3.10.0 + /@parcel/types/2.7.0_@parcel+core@2.7.0: resolution: {integrity: sha512-+dhXVUnseTCpJvBTGMp0V6X13z6O/A/+CUtwEpMGZ8XSmZ4Gk44GvaTiBOp0bJpWG4fvCKp+UmC8PYbrDiiziw==} dependencies: @@ -4191,7 +4204,7 @@ packages: '@parcel/core': 2.7.0 '@parcel/diagnostic': 2.7.0 '@parcel/logger': 2.7.0 - '@parcel/types': 2.7.0_@parcel+core@2.7.0 + '@parcel/types': 2.7.0 '@parcel/utils': 2.7.0 chrome-trace-event: 1.0.3 nullthrows: 1.1.1 From 0e252394d6c3616c474689c08253c290c39012c5 Mon Sep 17 00:00:00 2001 From: Louis <6723574+louisgv@users.noreply.github.com> Date: Sun, 16 Oct 2022 20:04:16 -0400 Subject: [PATCH 05/12] overlay and inline both working correctly, time to test out multiple --- cli/plasmo/src/type.ts | 50 +++--- .../static/common/csui-container-react.tsx | 58 +++++++ cli/plasmo/templates/static/common/csui.ts | 155 ++++++++++-------- .../react18/content-script-ui-mount.tsx | 79 +++------ examples | 2 +- .../src/handle-plasmo-internal.ts | 1 - 6 files changed, 196 insertions(+), 149 deletions(-) create mode 100644 cli/plasmo/templates/static/common/csui-container-react.tsx diff --git a/cli/plasmo/src/type.ts b/cli/plasmo/src/type.ts index 927926998..025e0401a 100644 --- a/cli/plasmo/src/type.ts +++ b/cli/plasmo/src/type.ts @@ -7,23 +7,16 @@ type Async = Promise | T type Getter = (props?: P) => Async -type GetHtmlElement = Getter +type GetElement = Getter export type PlasmoCSUIAnchor = { element: Element type: "overlay" | "inline" } -export type PlasmoGetRootContainer = ( - anchor: PlasmoCSUIAnchor, - mountState: PlasmoCSUIMountState -) => Async - -export type PlasmoGetOverlayAnchor = GetHtmlElement -export type PlasmoGetOverlayAnchorList = Getter - -export type PlasmoGetInlineAnchor = GetHtmlElement -export type PlasmoGetInlineAnchorList = Getter +export type PlasmoCSUIProps = { + anchor?: PlasmoCSUIAnchor +} export type PlasmoCSUIMountState = { document: Document @@ -42,25 +35,42 @@ export type PlasmoCSUIMountState = { hostMap: WeakMap } -export type PlasmoMountShadowHost = (props: { - observer: MutationObserver | null - shadowHost: Element - anchor: PlasmoCSUIAnchor -}) => Async +export type PlasmoGetRootContainer = ( + props: { + mountState?: PlasmoCSUIMountState + } & PlasmoCSUIProps +) => Async + +export type PlasmoGetOverlayAnchor = GetElement +export type PlasmoGetOverlayAnchorList = Getter + +export type PlasmoGetInlineAnchor = GetElement +export type PlasmoGetInlineAnchorList = Getter + +export type PlasmoMountShadowHost = ( + props: { + observer: MutationObserver | null + shadowHost: Element + } & PlasmoCSUIProps +) => Async export type PlasmoRender = ( - createRootContainer?: PlasmoGetRootContainer, - MountContainer?: (_props: PT) => JSX.Element | HTMLElement, - anchor?: PlasmoCSUIAnchor + props: { + createRootContainer?: (p: PlasmoCSUIAnchor) => Async + CSUIContainer?: (p: PT) => JSX.Element | Element + } & PlasmoCSUIProps ) => Async export type PlasmoGetShadowHostId = Getter export type PlasmoGetStyle = Getter +/** + * @return a cleanup unwatch function that will be run when unmounted + */ export type PlasmoWatchOverlayAnchor = ( updatePosition: () => Promise -) => void +) => () => void export type PlasmoCreateShadowRoot = ( shadowHost: HTMLDivElement diff --git a/cli/plasmo/templates/static/common/csui-container-react.tsx b/cli/plasmo/templates/static/common/csui-container-react.tsx new file mode 100644 index 000000000..0c2e91f16 --- /dev/null +++ b/cli/plasmo/templates/static/common/csui-container-react.tsx @@ -0,0 +1,58 @@ +import React from "react" + +import type { PlasmoCSUIAnchor, PlasmoWatchOverlayAnchor } from "~type" + +export const CSUIContainer = (props: { + anchor: PlasmoCSUIAnchor + children?: React.ReactNode + watchOverlayAnchor?: PlasmoWatchOverlayAnchor +}) => { + const [top, setTop] = React.useState(0) + const [left, setLeft] = React.useState(0) + + React.useEffect(() => { + // Handle overlay repositioning + if (props.anchor.type !== "overlay") { + return + } + + const updatePosition = async () => { + const rect = props.anchor.element.getBoundingClientRect() + + if (!rect) { + return + } + + const pos = { + left: rect.left + window.scrollX, + top: rect.top + window.scrollY + } + + setLeft(pos.left) + setTop(pos.top) + } + + updatePosition() + + const unwatch = props.watchOverlayAnchor?.(updatePosition) + window.addEventListener("scroll", updatePosition) + + return () => { + unwatch?.() + window.removeEventListener("scroll", updatePosition) + } + }, []) + + return ( +
+ {props.children} +
+ ) +} diff --git a/cli/plasmo/templates/static/common/csui.ts b/cli/plasmo/templates/static/common/csui.ts index 923a7b780..1b6e6e672 100644 --- a/cli/plasmo/templates/static/common/csui.ts +++ b/cli/plasmo/templates/static/common/csui.ts @@ -1,24 +1,53 @@ import type { PlasmoCSUI, PlasmoCSUIAnchor, PlasmoCSUIMountState } from "~type" -async function createShadowRoot( - anchor: PlasmoCSUIAnchor, +async function createShadowDOM( Mount: PlasmoCSUI, mountState?: PlasmoCSUIMountState ) { const shadowHost = document.createElement("div") mountState?.hostSet.add(shadowHost) - mountState?.hostMap.set(shadowHost, anchor) - - if (typeof Mount.getShadowHostId === "function") { - shadowHost.id = await Mount.getShadowHostId(anchor) - } const shadowRoot = typeof Mount.createShadowRoot === "function" ? await Mount.createShadowRoot(shadowHost) : shadowHost.attachShadow({ mode: "open" }) + const shadowContainer = document.createElement("div") + + shadowContainer.id = "plasmo-shadow-container" + shadowContainer.style.zIndex = "2147483647" + + shadowRoot.appendChild(shadowContainer) + + return { + shadowContainer, + shadowRoot, + shadowHost + } +} + +export type PlasmoCSUIShadowDOM = Awaited> + +async function injectAnchor( + { shadowContainer, shadowHost, shadowRoot }: PlasmoCSUIShadowDOM, + anchor: PlasmoCSUIAnchor, + Mount: PlasmoCSUI, + mountState?: PlasmoCSUIMountState +) { + shadowContainer.style.position = + anchor.type === "inline" ? "relative" : "absolute" + + if (typeof Mount.getStyle === "function") { + shadowRoot.prepend(await Mount.getStyle(anchor)) + } + + mountState?.hostMap.set(shadowHost, anchor) + + if (typeof Mount.getShadowHostId === "function") { + shadowHost.id = await Mount.getShadowHostId(anchor) + } + if (typeof Mount.mountShadowHost === "function") { await Mount.mountShadowHost({ shadowHost, @@ -30,12 +59,6 @@ async function createShadowRoot( } else { document.body.insertAdjacentElement("beforebegin", shadowHost) } - - if (typeof Mount.getStyle === "function") { - shadowRoot.appendChild(await Mount.getStyle(anchor)) - } - - return shadowRoot } export async function createShadowContainer( @@ -43,17 +66,11 @@ export async function createShadowContainer( Mount: PlasmoCSUI, mountState?: PlasmoCSUIMountState ) { - const shadowRoot = await createShadowRoot(anchor, Mount, mountState) + const shadowDOM = await createShadowDOM(Mount, mountState) - const container = document.createElement("div") - container.id = "plasmo-shadow-container" - container.style.cssText = ` - z-index: 2147483647; - position: ${anchor.type === "inline" ? "relative" : "absolute"}; - ` + await injectAnchor(shadowDOM, anchor, Mount, mountState) - shadowRoot.appendChild(container) - return container + return shadowDOM.shadowContainer } export function createAnchorObserver(Mount: PlasmoCSUI) { @@ -111,62 +128,60 @@ export function createAnchorObserver(Mount: PlasmoCSUI) { } } - if (hasInlineAnchor) { - const inlineAnchor = await Mount.getInlineAnchor() - if (inlineAnchor && !mountedInlineAnchorSet.has(inlineAnchor)) { - render({ - type: "inline", - element: inlineAnchor - }) - } + const [inlineAnchor, inlineAnchorList, overlayAnchor, overlayAnchorList] = + await Promise.all([ + hasInlineAnchor ? Mount.getInlineAnchor() : null, + hasInlineAnchorList ? Mount.getInlineAnchorList() : null, + hasOverlayAnchor ? Mount.getOverlayAnchor() : null, + hasOverlayAnchorList ? Mount.getOverlayAnchorList() : null + ]) + + const renderList: PlasmoCSUIAnchor[] = [] + + if (!!inlineAnchor && !mountedInlineAnchorSet.has(inlineAnchor)) { + renderList.push({ + element: inlineAnchor, + type: "inline" + }) } - if (hasInlineAnchorList) { - const inlineAnchorList = await Mount.getInlineAnchorList() - - if (inlineAnchorList!.length > 0) { - inlineAnchorList!.forEach((inlineAnchor) => { - if ( - inlineAnchor instanceof HTMLElement && - !mountedInlineAnchorSet.has(inlineAnchor) - ) { - render({ - element: inlineAnchor, - type: "inline" - }) - } - }) - } + if (!!overlayAnchor && !mountedOverlayAnchorSet.has(overlayAnchor)) { + renderList.push({ + element: overlayAnchor, + type: "overlay" + }) } - if (hasOverlayAnchor) { - const overlayAnchor = await Mount.getOverlayAnchor() - if (overlayAnchor && !mountedOverlayAnchorSet.has(overlayAnchor)) { - render({ - element: overlayAnchor, - type: "overlay" - }) - } + if ((inlineAnchorList?.length || 0) > 0) { + inlineAnchorList.forEach((inlineAnchor) => { + if ( + inlineAnchor instanceof Element && + !mountedInlineAnchorSet.has(inlineAnchor) + ) { + renderList.push({ + element: inlineAnchor, + type: "inline" + }) + } + }) } - if (hasOverlayAnchorList) { - const overlayAnchorList = await Mount.getOverlayAnchorList() - - if (overlayAnchorList!.length > 0) { - overlayAnchorList!.forEach((overlayAnchor) => { - if ( - overlayAnchor instanceof HTMLElement && - !mountedOverlayAnchorSet.has(overlayAnchor) - ) { - render({ - element: overlayAnchor, - type: "overlay" - }) - } - }) - } + if ((overlayAnchorList?.length || 0) > 0) { + overlayAnchorList.forEach((overlayAnchor) => { + if ( + overlayAnchor instanceof Element && + !mountedOverlayAnchorSet.has(overlayAnchor) + ) { + renderList.push({ + element: overlayAnchor, + type: "overlay" + }) + } + }) } + await Promise.all(renderList.map(render)) + if (mountState.isMutated) { mountState.isMutated = false await mountAnchors(render) diff --git a/cli/plasmo/templates/static/react18/content-script-ui-mount.tsx b/cli/plasmo/templates/static/react18/content-script-ui-mount.tsx index a5657a32e..318666314 100644 --- a/cli/plasmo/templates/static/react18/content-script-ui-mount.tsx +++ b/cli/plasmo/templates/static/react18/content-script-ui-mount.tsx @@ -1,9 +1,8 @@ -// prettier-sort-ignore import { createAnchorObserver, createShadowContainer } from "@plasmo-static-common/csui" - +import { CSUIContainer } from "@plasmo-static-common/csui-container-react" import React from "react" import { createRoot } from "react-dom/client" @@ -11,79 +10,45 @@ import { createRoot } from "react-dom/client" // @ts-ignore import * as RawMount from "__plasmo_mount_content_script__" -import type { PlasmoCSUI, PlasmoCSUIAnchor, PlasmoCSUIMountState } from "~type" +import type { PlasmoCSUI, PlasmoCSUIAnchor } from "~type" // Escape parcel's static analyzer const Mount = RawMount as PlasmoCSUI -const MountContainer = (props: any) => { - const [top, setTop] = React.useState(0) - const [left, setLeft] = React.useState(0) - - React.useEffect(() => { - if (typeof Mount.getOverlayAnchor !== "function") { - return - } - - const updatePosition = async () => { - const anchor = await Mount.getOverlayAnchor() - - const rect = anchor?.getBoundingClientRect() - - if (!rect) { - return - } - - const pos = { - left: rect.left + window.scrollX, - top: rect.top + window.scrollY - } - - setLeft(pos.left) - setTop(pos.top) - } - - updatePosition() - - if (typeof Mount.watchOverlayAnchor === "function") { - return Mount.watchOverlayAnchor(updatePosition) - } - }, []) - - return ( -
- -
- ) -} - const observer = createAnchorObserver(Mount) const createRootContainer = (anchor: PlasmoCSUIAnchor) => typeof Mount.getRootContainer === "function" - ? Mount.getRootContainer(anchor, observer?.mountState) + ? Mount.getRootContainer({ + anchor, + mountState: observer?.mountState + }) : createShadowContainer(anchor, Mount, observer?.mountState) const render = typeof Mount.render === "function" - ? (anchor?: PlasmoCSUIAnchor) => - Mount.render(createRootContainer, MountContainer, anchor) - : async (anchor?: PlasmoCSUIAnchor) => { + ? (anchor: PlasmoCSUIAnchor) => + Mount.render({ + anchor, + createRootContainer, + CSUIContainer + }) + : async (anchor: PlasmoCSUIAnchor) => { const rootContainer = await createRootContainer(anchor) const root = createRoot(rootContainer) - root.render() + root.render( + + + + ) } if (!!observer) { observer.start(render) } else { - render() + render({ + element: document.body, + type: "overlay" + }) } diff --git a/examples b/examples index 6058c8e74..114ff3fac 160000 --- a/examples +++ b/examples @@ -1 +1 @@ -Subproject commit 6058c8e74771223c037e3cf316d3a0e2819a1483 +Subproject commit 114ff3fac562f5f172a296e720aa3e58bbeeb53f diff --git a/packages/parcel-resolver/src/handle-plasmo-internal.ts b/packages/parcel-resolver/src/handle-plasmo-internal.ts index ff662ac8b..e90c54fc6 100644 --- a/packages/parcel-resolver/src/handle-plasmo-internal.ts +++ b/packages/parcel-resolver/src/handle-plasmo-internal.ts @@ -3,7 +3,6 @@ import { resolve } from "path" import { ResolverProps, ResolverResult, - relevantExtensionList, resolveSourceIndex, state } from "./shared" From 9e0acd8235c6d72725c2015a51ad48edf91d2f02 Mon Sep 17 00:00:00 2001 From: Louis <6723574+louisgv@users.noreply.github.com> Date: Mon, 17 Oct 2022 03:43:35 -0400 Subject: [PATCH 06/12] multiple overlay anchor done --- cli/plasmo/src/type.ts | 27 ++-- .../static/common/csui-container-react.tsx | 27 ++-- cli/plasmo/templates/static/common/csui.ts | 116 ++++++++++++------ .../react18/content-script-ui-mount.tsx | 40 ++++-- 4 files changed, 150 insertions(+), 60 deletions(-) diff --git a/cli/plasmo/src/type.ts b/cli/plasmo/src/type.ts index 025e0401a..7613e7711 100644 --- a/cli/plasmo/src/type.ts +++ b/cli/plasmo/src/type.ts @@ -33,6 +33,11 @@ export type PlasmoCSUIMountState = { * Used to add more metadata to the host Set */ hostMap: WeakMap + + /** + * Used to align overlay anchor with elements on the page + */ + overlayTargetList: Element[] } export type PlasmoGetRootContainer = ( @@ -54,13 +59,6 @@ export type PlasmoMountShadowHost = ( } & PlasmoCSUIProps ) => Async -export type PlasmoRender = ( - props: { - createRootContainer?: (p: PlasmoCSUIAnchor) => Async - CSUIContainer?: (p: PT) => JSX.Element | Element - } & PlasmoCSUIProps -) => Async - export type PlasmoGetShadowHostId = Getter export type PlasmoGetStyle = Getter @@ -72,10 +70,23 @@ export type PlasmoWatchOverlayAnchor = ( updatePosition: () => Promise ) => () => void +export type PlasmoCSUIContainerProps = { + id?: string + children?: React.ReactNode + watchOverlayAnchor?: PlasmoWatchOverlayAnchor +} & PlasmoCSUIProps + export type PlasmoCreateShadowRoot = ( - shadowHost: HTMLDivElement + shadowHost: HTMLElement ) => Async +export type PlasmoRender = ( + props: { + createRootContainer?: (p: PlasmoCSUIAnchor) => Async + CSUIContainer?: (p: PlasmoCSUIContainerProps) => JSX.Element | Element + } & PlasmoCSUIProps +) => Async + export type PlasmoCSUI = { default: any getStyle: PlasmoGetStyle diff --git a/cli/plasmo/templates/static/common/csui-container-react.tsx b/cli/plasmo/templates/static/common/csui-container-react.tsx index 0c2e91f16..69e4ded3c 100644 --- a/cli/plasmo/templates/static/common/csui-container-react.tsx +++ b/cli/plasmo/templates/static/common/csui-container-react.tsx @@ -1,12 +1,8 @@ import React from "react" -import type { PlasmoCSUIAnchor, PlasmoWatchOverlayAnchor } from "~type" +import type { PlasmoCSUIContainerProps } from "~type" -export const CSUIContainer = (props: { - anchor: PlasmoCSUIAnchor - children?: React.ReactNode - watchOverlayAnchor?: PlasmoWatchOverlayAnchor -}) => { +export const OverlayCSUIContainer = (props: PlasmoCSUIContainerProps) => { const [top, setTop] = React.useState(0) const [left, setLeft] = React.useState(0) @@ -45,10 +41,11 @@ export const CSUIContainer = (props: { return (
@@ -56,3 +53,17 @@ export const CSUIContainer = (props: {
) } + +export const InlineCSUIContainer = (props: PlasmoCSUIContainerProps) => ( +
+ {props.children} +
+) diff --git a/cli/plasmo/templates/static/common/csui.ts b/cli/plasmo/templates/static/common/csui.ts index 1b6e6e672..888b9e45d 100644 --- a/cli/plasmo/templates/static/common/csui.ts +++ b/cli/plasmo/templates/static/common/csui.ts @@ -1,12 +1,7 @@ import type { PlasmoCSUI, PlasmoCSUIAnchor, PlasmoCSUIMountState } from "~type" -async function createShadowDOM( - Mount: PlasmoCSUI, - mountState?: PlasmoCSUIMountState -) { - const shadowHost = document.createElement("div") - - mountState?.hostSet.add(shadowHost) +async function createShadowDOM(Mount: PlasmoCSUI) { + const shadowHost = document.createElement("plasmo-csui") const shadowRoot = typeof Mount.createShadowRoot === "function" @@ -17,33 +12,29 @@ async function createShadowDOM( shadowContainer.id = "plasmo-shadow-container" shadowContainer.style.zIndex = "2147483647" + shadowContainer.style.position = "relative" shadowRoot.appendChild(shadowContainer) return { - shadowContainer, + shadowHost, shadowRoot, - shadowHost + shadowContainer } } export type PlasmoCSUIShadowDOM = Awaited> async function injectAnchor( - { shadowContainer, shadowHost, shadowRoot }: PlasmoCSUIShadowDOM, + { shadowHost, shadowRoot }: PlasmoCSUIShadowDOM, anchor: PlasmoCSUIAnchor, Mount: PlasmoCSUI, mountState?: PlasmoCSUIMountState ) { - shadowContainer.style.position = - anchor.type === "inline" ? "relative" : "absolute" - if (typeof Mount.getStyle === "function") { shadowRoot.prepend(await Mount.getStyle(anchor)) } - mountState?.hostMap.set(shadowHost, anchor) - if (typeof Mount.getShadowHostId === "function") { shadowHost.id = await Mount.getShadowHostId(anchor) } @@ -66,11 +57,14 @@ export async function createShadowContainer( Mount: PlasmoCSUI, mountState?: PlasmoCSUIMountState ) { - const shadowDOM = await createShadowDOM(Mount, mountState) + const shadowDom = await createShadowDOM(Mount) + + mountState?.hostSet.add(shadowDom.shadowHost) + mountState?.hostMap.set(shadowDom.shadowHost, anchor) - await injectAnchor(shadowDOM, anchor, Mount, mountState) + await injectAnchor(shadowDom, anchor, Mount, mountState) - return shadowDOM.shadowContainer + return shadowDom.shadowContainer } export function createAnchorObserver(Mount: PlasmoCSUI) { @@ -82,7 +76,9 @@ export function createAnchorObserver(Mount: PlasmoCSUI) { isMutated: false, hostSet: new Set(), - hostMap: new WeakMap() + hostMap: new WeakMap(), + + overlayTargetList: [] } const isMounted = (el: Element | null) => @@ -90,6 +86,41 @@ export function createAnchorObserver(Mount: PlasmoCSUI) { ? !!document.getElementById(el.id) : el?.getRootNode({ composed: true }) === mountState.document + const isVisible = (el: Element) => { + const elementRect = el.getBoundingClientRect() + const elementStyle = getComputedStyle(el) + + if (elementStyle.display === "none") { + return false + } + + if (elementStyle.visibility === "hidden") { + return false + } + + if (elementStyle.opacity === "0") { + return false + } + + if ( + elementRect.width === 0 && + elementRect.height === 0 && + elementStyle.overflow !== "hidden" + ) { + return false + } + + // Check if the element is irrevocably off-screen: + if ( + elementRect.x + elementRect.width < 0 || + elementRect.y + elementRect.height < 0 + ) { + return false + } + + return true + } + const hasInlineAnchor = typeof Mount.getInlineAnchor === "function" const hasOverlayAnchor = typeof Mount.getOverlayAnchor === "function" @@ -110,7 +141,9 @@ export function createAnchorObserver(Mount: PlasmoCSUI) { mountState.isMounting = true const mountedInlineAnchorSet = new WeakSet() - const mountedOverlayAnchorSet = new WeakSet() + + // There should only be 1 overlay mount + let overlayHost: Element = null // Go through mounted sets and check if they are still mounted for (const el of mountState.hostSet) { @@ -120,7 +153,7 @@ export function createAnchorObserver(Mount: PlasmoCSUI) { if (anchor.type === "inline") { mountedInlineAnchorSet.add(anchor.element) } else if (anchor.type === "overlay") { - mountedOverlayAnchorSet.add(anchor.element) + overlayHost = el } } } else { @@ -145,13 +178,6 @@ export function createAnchorObserver(Mount: PlasmoCSUI) { }) } - if (!!overlayAnchor && !mountedOverlayAnchorSet.has(overlayAnchor)) { - renderList.push({ - element: overlayAnchor, - type: "overlay" - }) - } - if ((inlineAnchorList?.length || 0) > 0) { inlineAnchorList.forEach((inlineAnchor) => { if ( @@ -166,26 +192,42 @@ export function createAnchorObserver(Mount: PlasmoCSUI) { }) } + const overlayTargetList = [] + + if (!!overlayAnchor && isVisible(overlayAnchor)) { + overlayTargetList.push(overlayAnchor) + } + if ((overlayAnchorList?.length || 0) > 0) { - overlayAnchorList.forEach((overlayAnchor) => { - if ( - overlayAnchor instanceof Element && - !mountedOverlayAnchorSet.has(overlayAnchor) - ) { - renderList.push({ - element: overlayAnchor, - type: "overlay" - }) + overlayAnchorList.forEach((el) => { + if (el instanceof Element && isVisible(el)) { + overlayTargetList.push(el) } }) } + if (overlayTargetList.length > 0) { + mountState.overlayTargetList = overlayTargetList + if (!overlayHost) { + renderList.push({ + element: document.body, + type: "overlay" + }) + } else { + // force re-render + } + } else { + overlayHost?.remove() + mountState.hostSet.delete(overlayHost) + } + await Promise.all(renderList.map(render)) if (mountState.isMutated) { mountState.isMutated = false await mountAnchors(render) } + mountState.isMounting = false } diff --git a/cli/plasmo/templates/static/react18/content-script-ui-mount.tsx b/cli/plasmo/templates/static/react18/content-script-ui-mount.tsx index 318666314..8d0e0dabb 100644 --- a/cli/plasmo/templates/static/react18/content-script-ui-mount.tsx +++ b/cli/plasmo/templates/static/react18/content-script-ui-mount.tsx @@ -2,7 +2,10 @@ import { createAnchorObserver, createShadowContainer } from "@plasmo-static-common/csui" -import { CSUIContainer } from "@plasmo-static-common/csui-container-react" +import { + InlineCSUIContainer, + OverlayCSUIContainer +} from "@plasmo-static-common/csui-container-react" import React from "react" import { createRoot } from "react-dom/client" @@ -31,17 +34,40 @@ const render = Mount.render({ anchor, createRootContainer, - CSUIContainer + CSUIContainer: OverlayCSUIContainer }) : async (anchor: PlasmoCSUIAnchor) => { const rootContainer = await createRootContainer(anchor) const root = createRoot(rootContainer) - root.render( - - - - ) + if (anchor.type === "overlay") { + root.render( + <> + {observer.mountState.overlayTargetList.map((target, i) => { + const id = `plasmo-overlay-${i}` + const innerAnchor: PlasmoCSUIAnchor = { + element: target, + type: "overlay" + } + return ( + + + + ) + })} + + ) + } else { + root.render( + + + + ) + } } if (!!observer) { From 0ab8bd983b283c5a1df52a674e42e092f0535576 Mon Sep 17 00:00:00 2001 From: Louis <6723574+louisgv@users.noreply.github.com> Date: Mon, 17 Oct 2022 14:12:29 -0400 Subject: [PATCH 07/12] Implement csui container for vanilla cases --- cli/plasmo/src/type.ts | 9 +- .../static/common/csui-container-vanilla.tsx | 54 +++++ cli/plasmo/templates/static/common/csui.ts | 46 ++++- .../react17/content-script-ui-mount.tsx | 195 +++++------------- .../react18/content-script-ui-mount.tsx | 95 ++++----- .../static/svelte3/content-script-ui-mount.ts | 188 ++++++----------- .../static/vue3/content-script-ui-mount.ts | 184 +++++------------ 7 files changed, 318 insertions(+), 453 deletions(-) create mode 100644 cli/plasmo/templates/static/common/csui-container-vanilla.tsx diff --git a/cli/plasmo/src/type.ts b/cli/plasmo/src/type.ts index 7613e7711..3272ca4a8 100644 --- a/cli/plasmo/src/type.ts +++ b/cli/plasmo/src/type.ts @@ -76,6 +76,10 @@ export type PlasmoCSUIContainerProps = { watchOverlayAnchor?: PlasmoWatchOverlayAnchor } & PlasmoCSUIProps +export type PlasmoCSUIContainer = ( + p: PlasmoCSUIContainerProps +) => JSX.Element | Element + export type PlasmoCreateShadowRoot = ( shadowHost: HTMLElement ) => Async @@ -83,8 +87,9 @@ export type PlasmoCreateShadowRoot = ( export type PlasmoRender = ( props: { createRootContainer?: (p: PlasmoCSUIAnchor) => Async - CSUIContainer?: (p: PlasmoCSUIContainerProps) => JSX.Element | Element - } & PlasmoCSUIProps + } & PlasmoCSUIProps, + InlineCSUIContainer?: PlasmoCSUIContainer, + OverlayCSUIContainer?: PlasmoCSUIContainer ) => Async export type PlasmoCSUI = { diff --git a/cli/plasmo/templates/static/common/csui-container-vanilla.tsx b/cli/plasmo/templates/static/common/csui-container-vanilla.tsx new file mode 100644 index 000000000..1b4e9dd41 --- /dev/null +++ b/cli/plasmo/templates/static/common/csui-container-vanilla.tsx @@ -0,0 +1,54 @@ +import type { PlasmoCSUIContainerProps } from "~type" + +export const createOverlayCSUIContainer = (props: PlasmoCSUIContainerProps) => { + const container = document.createElement("div") + container.className = "plasmo-csui-container" + container.id = props.id + + container.style.cssText = ` + display: flex; + position: relative; + top: 0px; + left: 0px; + ` + + if (props.anchor.type === "overlay") { + const updatePosition = async () => { + const rect = props.anchor.element.getBoundingClientRect() + + if (!rect) { + return + } + + const pos = { + left: rect.left + window.scrollX, + top: rect.top + window.scrollY + } + + container.style.top = `${pos.top}px` + container.style.left = `${pos.left}px` + } + + updatePosition() + + props.watchOverlayAnchor?.(updatePosition) + window.addEventListener("scroll", updatePosition) + } + + return container +} + +export const createInlineCSUIContainer = (props: PlasmoCSUIContainerProps) => { + const container = document.createElement("div") + container.className = "plasmo-csui-container" + container.id = "plasmo-inline" + + container.style.cssText = ` + display: flex; + position: relative; + top: 0px; + left: 0px; + ` + + return container +} diff --git a/cli/plasmo/templates/static/common/csui.ts b/cli/plasmo/templates/static/common/csui.ts index 888b9e45d..7be9d8d8f 100644 --- a/cli/plasmo/templates/static/common/csui.ts +++ b/cli/plasmo/templates/static/common/csui.ts @@ -1,4 +1,9 @@ -import type { PlasmoCSUI, PlasmoCSUIAnchor, PlasmoCSUIMountState } from "~type" +import type { + PlasmoCSUI, + PlasmoCSUIAnchor, + PlasmoCSUIContainer, + PlasmoCSUIMountState +} from "~type" async function createShadowDOM(Mount: PlasmoCSUI) { const shadowHost = document.createElement("plasmo-csui") @@ -26,9 +31,9 @@ async function createShadowDOM(Mount: PlasmoCSUI) { export type PlasmoCSUIShadowDOM = Awaited> async function injectAnchor( - { shadowHost, shadowRoot }: PlasmoCSUIShadowDOM, - anchor: PlasmoCSUIAnchor, Mount: PlasmoCSUI, + anchor: PlasmoCSUIAnchor, + { shadowHost, shadowRoot }: PlasmoCSUIShadowDOM, mountState?: PlasmoCSUIMountState ) { if (typeof Mount.getStyle === "function") { @@ -53,8 +58,8 @@ async function injectAnchor( } export async function createShadowContainer( - anchor: PlasmoCSUIAnchor, Mount: PlasmoCSUI, + anchor: PlasmoCSUIAnchor, mountState?: PlasmoCSUIMountState ) { const shadowDom = await createShadowDOM(Mount) @@ -62,7 +67,7 @@ export async function createShadowContainer( mountState?.hostSet.add(shadowDom.shadowHost) mountState?.hostMap.set(shadowDom.shadowHost, anchor) - await injectAnchor(shadowDom, anchor, Mount, mountState) + await injectAnchor(Mount, anchor, shadowDom, mountState) return shadowDom.shadowContainer } @@ -252,3 +257,34 @@ export function createAnchorObserver(Mount: PlasmoCSUI) { mountState } } + +export const createRender = ( + Mount: PlasmoCSUI, + containers: [PlasmoCSUIContainer, PlasmoCSUIContainer], + mountState?: PlasmoCSUIMountState, + renderFx?: (anchor: PlasmoCSUIAnchor, rootContainer: Element) => Promise +) => { + const createRootContainer = (anchor: PlasmoCSUIAnchor) => + typeof Mount.getRootContainer === "function" + ? Mount.getRootContainer({ + anchor, + mountState + }) + : createShadowContainer(Mount, anchor, mountState) + + if (typeof Mount.render === "function") { + return (anchor: PlasmoCSUIAnchor) => + Mount.render( + { + anchor, + createRootContainer + }, + ...containers + ) + } + + return async (anchor: PlasmoCSUIAnchor) => { + const rootContainer = await createRootContainer(anchor) + return renderFx(anchor, rootContainer) + } +} diff --git a/cli/plasmo/templates/static/react17/content-script-ui-mount.tsx b/cli/plasmo/templates/static/react17/content-script-ui-mount.tsx index 8613b88da..03d3371c0 100644 --- a/cli/plasmo/templates/static/react17/content-script-ui-mount.tsx +++ b/cli/plasmo/templates/static/react17/content-script-ui-mount.tsx @@ -1,155 +1,74 @@ +import { createAnchorObserver, createRender } from "@plasmo-static-common/csui" +import { + InlineCSUIContainer, + OverlayCSUIContainer +} from "@plasmo-static-common/csui-container-react" import React from "react" +import * as ReactDOM from "react-dom" // prettier-sort-ignore // @ts-ignore import * as RawMount from "__plasmo_mount_content_script__" -import * as ReactDOM from "react-dom" - -import type { PlasmoCSUI, PlasmoCSUIMountState } from "../../../src/type" +import type { PlasmoCSUI, PlasmoCSUIAnchor } from "~type" // Escape parcel's static analyzer const Mount = RawMount as PlasmoCSUI -const mountState: PlasmoCSUIMountState = { - document: document || window.document, - observer: null, - shadowHost: null, - // cached anchors: - inlineAnchor: null -} - -const isMounted = (el: Element | null) => - el?.id - ? !!document.getElementById(el.id) - : el?.getRootNode({ composed: true }) === mountState.document - -const MountContainer = () => { - const [top, setTop] = React.useState(0) - const [left, setLeft] = React.useState(0) - - React.useEffect(() => { - if (typeof Mount.getOverlayAnchor !== "function") { - return - } - const updatePosition = async () => { - const anchor = await Mount.getOverlayAnchor() - - const rect = anchor?.getBoundingClientRect() - - if (!rect) { - return +const observer = createAnchorObserver(Mount) + +const render = createRender( + Mount, + [InlineCSUIContainer, OverlayCSUIContainer], + observer?.mountState, + async (anchor, rootContainer) => { + switch (anchor.type) { + case "inline": { + ReactDOM.render( + + + , + rootContainer + ) + break } - - const pos = { - left: rect.left + window.scrollX, - top: rect.top + window.scrollY + case "overlay": { + const targetList = observer?.mountState.overlayTargetList || [ + anchor.element + ] + + ReactDOM.render( + <> + {targetList.map((target, i) => { + const id = `plasmo-overlay-${i}` + const innerAnchor: PlasmoCSUIAnchor = { + element: target, + type: "overlay" + } + return ( + + + + ) + })} + , + rootContainer + ) + break } - - setLeft(pos.left) - setTop(pos.top) } - - updatePosition() - - if (typeof Mount.watchOverlayAnchor === "function") { - Mount.watchOverlayAnchor(updatePosition) - } - - window.addEventListener("scroll", updatePosition) - - return () => window.removeEventListener("scroll", updatePosition) - }, []) - - return ( -
- -
- ) -} - -async function createShadowContainer() { - const container = document.createElement("div") - - container.id = "plasmo-shadow-container" - - const isInline = !!mountState.inlineAnchor - - container.style.cssText = ` - z-index: 2147483647; - position: ${isInline ? "relative" : "absolute"}; - ` - - const shadowHost = document.createElement("div") - - if (typeof Mount.getShadowHostId === "function") { - shadowHost.id = await Mount.getShadowHostId() - } - - const shadowRoot = - typeof Mount.createShadowRoot === "function" - ? await Mount.createShadowRoot(shadowHost) - : shadowHost.attachShadow({ mode: "open" }) - - mountState.shadowHost = shadowHost - - if (typeof Mount.mountShadowHost === "function") { - await Mount.mountShadowHost(mountState) - } else if (isInline) { - mountState.inlineAnchor?.insertAdjacentElement("afterend", shadowHost) - } else { - document.body.insertAdjacentElement("beforebegin", shadowHost) } +) - if (typeof Mount.getStyle === "function") { - shadowRoot.appendChild(await Mount.getStyle()) - } - - shadowRoot.appendChild(container) - return container -} - -const createRootContainer = - typeof Mount.getRootContainer === "function" - ? Mount.getRootContainer - : createShadowContainer - -const render = async () => { - const rootContainer = await createRootContainer() - ReactDOM.render(, rootContainer) -} - -const startObserver = () => { - mountState.observer = new MutationObserver(() => { - if (isMounted(mountState.shadowHost)) { - return - } - const inlineAnchor = Mount.getInlineAnchor() - if (!inlineAnchor) { - return - } - - mountState.inlineAnchor = inlineAnchor - render() - }) - - mountState.observer.observe(document.body, { - childList: true, - subtree: true - }) -} - -if (typeof Mount.render === "function") { - Mount.render(createRootContainer, MountContainer) -} else if (typeof Mount.getInlineAnchor === "function") { - startObserver() +if (!!observer) { + observer.start(render) } else { - render() + render({ + element: document.body, + type: "overlay" + }) } diff --git a/cli/plasmo/templates/static/react18/content-script-ui-mount.tsx b/cli/plasmo/templates/static/react18/content-script-ui-mount.tsx index 8d0e0dabb..74ed9efa1 100644 --- a/cli/plasmo/templates/static/react18/content-script-ui-mount.tsx +++ b/cli/plasmo/templates/static/react18/content-script-ui-mount.tsx @@ -1,7 +1,4 @@ -import { - createAnchorObserver, - createShadowContainer -} from "@plasmo-static-common/csui" +import { createAnchorObserver, createRender } from "@plasmo-static-common/csui" import { InlineCSUIContainer, OverlayCSUIContainer @@ -20,55 +17,51 @@ const Mount = RawMount as PlasmoCSUI const observer = createAnchorObserver(Mount) -const createRootContainer = (anchor: PlasmoCSUIAnchor) => - typeof Mount.getRootContainer === "function" - ? Mount.getRootContainer({ - anchor, - mountState: observer?.mountState - }) - : createShadowContainer(anchor, Mount, observer?.mountState) - -const render = - typeof Mount.render === "function" - ? (anchor: PlasmoCSUIAnchor) => - Mount.render({ - anchor, - createRootContainer, - CSUIContainer: OverlayCSUIContainer - }) - : async (anchor: PlasmoCSUIAnchor) => { - const rootContainer = await createRootContainer(anchor) - const root = createRoot(rootContainer) +const render = createRender( + Mount, + [InlineCSUIContainer, OverlayCSUIContainer], + observer?.mountState, + async (anchor, rootContainer) => { + const root = createRoot(rootContainer) + switch (anchor.type) { + case "inline": { + root.render( + + + + ) + break + } + case "overlay": { + const targetList = observer.mountState?.overlayTargetList || [ + anchor.element + ] - if (anchor.type === "overlay") { - root.render( - <> - {observer.mountState.overlayTargetList.map((target, i) => { - const id = `plasmo-overlay-${i}` - const innerAnchor: PlasmoCSUIAnchor = { - element: target, - type: "overlay" - } - return ( - - - - ) - })} - - ) - } else { - root.render( - - - - ) - } + root.render( + <> + {targetList.map((target, i) => { + const id = `plasmo-overlay-${i}` + const innerAnchor: PlasmoCSUIAnchor = { + element: target, + type: "overlay" + } + return ( + + + + ) + })} + + ) + break } + } + } +) if (!!observer) { observer.start(render) diff --git a/cli/plasmo/templates/static/svelte3/content-script-ui-mount.ts b/cli/plasmo/templates/static/svelte3/content-script-ui-mount.ts index 33405be23..21f3967f0 100644 --- a/cli/plasmo/templates/static/svelte3/content-script-ui-mount.ts +++ b/cli/plasmo/templates/static/svelte3/content-script-ui-mount.ts @@ -1,144 +1,74 @@ +import { createAnchorObserver, createRender } from "@plasmo-static-common/csui" +import { + createInlineCSUIContainer, + createOverlayCSUIContainer +} from "@plasmo-static-common/csui-container-vanilla" + // prettier-sort-ignore // @ts-ignore import * as RawMount from "__plasmo_mount_content_script__" -import type { PlasmoCSUI, PlasmoCSUIMountState } from "~type" +import type { PlasmoCSUI, PlasmoCSUIAnchor } from "~type" // Escape parcel's static analyzer const Mount = RawMount as PlasmoCSUI -const mountState: PlasmoCSUIMountState = { - document: document || window.document, - observer: null, - shadowHost: null, - // cached anchors: - inlineAnchor: null -} - -const isMounted = (el: Element | null) => - el?.id - ? !!document.getElementById(el.id) - : el?.getRootNode({ composed: true }) === mountState.document - -const createMountContainer = () => { - const container = document.createElement("div") - container.id = "plasmo-mount-container" - - container.style.cssText = ` - display: flex; - position: relative; - top: 0px; - left: 0px; - ` - - if (typeof Mount.getOverlayAnchor === "function") { - const updatePosition = async () => { - const anchor = await Mount.getOverlayAnchor() - - const rect = anchor?.getBoundingClientRect() - - if (!rect) { - return +const observer = createAnchorObserver(Mount) + +const render = createRender( + Mount, + [createInlineCSUIContainer, createOverlayCSUIContainer], + observer?.mountState, + async (anchor, rootContainer) => { + switch (anchor.type) { + case "inline": { + const mountPoint = createInlineCSUIContainer({ anchor }) + rootContainer.appendChild(mountPoint) + new Mount.default({ + target: mountPoint, + props: { + anchor + } + }) + break } - - const pos = { - left: rect.left + window.scrollX, - top: rect.top + window.scrollY + case "overlay": { + const targetList = observer?.mountState.overlayTargetList || [ + anchor.element + ] + + targetList.forEach((target, i) => { + const id = `plasmo-overlay-${i}` + const innerAnchor: PlasmoCSUIAnchor = { + element: target, + type: "overlay" + } + + const mountPoint = createOverlayCSUIContainer({ + id, + anchor: innerAnchor, + watchOverlayAnchor: Mount.watchOverlayAnchor + }) + + rootContainer.appendChild(mountPoint) + new Mount.default({ + target: mountPoint, + props: { + anchor: innerAnchor + } + }) + }) + break } - - container.style.top = `${pos.top}px` - container.style.left = `${pos.left}px` } - - if (typeof Mount.watchOverlayAnchor === "function") { - Mount.watchOverlayAnchor(updatePosition) - } - - updatePosition() - window.addEventListener("scroll", updatePosition) - } - return container -} - -async function createShadowContainer() { - const container = document.createElement("div") - - container.id = "plasmo-shadow-container" - - const isInline = !!mountState.inlineAnchor - - container.style.cssText = ` - z-index: 2147483647; - position: ${isInline ? "relative" : "absolute"}; - ` - - const shadowHost = document.createElement("div") - - if (typeof Mount.getShadowHostId === "function") { - shadowHost.id = await Mount.getShadowHostId() } +) - const shadowRoot = - typeof Mount.createShadowRoot === "function" - ? await Mount.createShadowRoot(shadowHost) - : shadowHost.attachShadow({ mode: "open" }) - - mountState.shadowHost = shadowHost - - if (typeof Mount.mountShadowHost === "function") { - await Mount.mountShadowHost(mountState) - } else if (isInline) { - mountState.inlineAnchor?.insertAdjacentElement("afterend", shadowHost) - } else { - document.body.insertAdjacentElement("beforebegin", shadowHost) - } - - if (typeof Mount.getStyle === "function") { - shadowRoot.appendChild(await Mount.getStyle()) - } - - shadowRoot.appendChild(container) - return container -} - -const createRootContainer = - typeof Mount.getRootContainer === "function" - ? Mount.getRootContainer - : createShadowContainer - -const render = async () => { - const rootContainer = await createRootContainer() - const mountPoint = createMountContainer() - rootContainer.appendChild(mountPoint) - new Mount.default({ - target: mountPoint - }) -} - -const startObserver = () => { - mountState.observer = new MutationObserver(() => { - if (isMounted(mountState.shadowHost)) { - return - } - const inlineAnchor = Mount.getInlineAnchor() - if (!inlineAnchor) { - return - } - - mountState.inlineAnchor = inlineAnchor - render() - }) - - mountState.observer.observe(document.body, { - childList: true, - subtree: true - }) -} - -if (typeof Mount.render === "function") { - Mount.render(createRootContainer, createMountContainer) -} else if (typeof Mount.getInlineAnchor === "function") { - startObserver() +if (!!observer) { + observer.start(render) } else { - render() + render({ + element: document.body, + type: "overlay" + }) } diff --git a/cli/plasmo/templates/static/vue3/content-script-ui-mount.ts b/cli/plasmo/templates/static/vue3/content-script-ui-mount.ts index 23cfe972a..118dcf3a0 100644 --- a/cli/plasmo/templates/static/vue3/content-script-ui-mount.ts +++ b/cli/plasmo/templates/static/vue3/content-script-ui-mount.ts @@ -1,3 +1,8 @@ +import { createAnchorObserver, createRender } from "@plasmo-static-common/csui" +import { + createInlineCSUIContainer, + createOverlayCSUIContainer +} from "@plasmo-static-common/csui-container-vanilla" // @ts-ignore import { createApp } from "vue" @@ -5,142 +10,65 @@ import { createApp } from "vue" // @ts-ignore import RawMount from "__plasmo_mount_content_script__" -import type { PlasmoCSUI, PlasmoCSUIMountState } from "~type" +import type { PlasmoCSUI, PlasmoCSUIAnchor } from "~type" // Escape parcel's static analyzer const Mount = RawMount.plasmo as PlasmoCSUI -const mountState: PlasmoCSUIMountState = { - document: document || window.document, - observer: null, - shadowHost: null, - // cached anchors: - inlineAnchor: null -} - -const isMounted = (el: Element | null) => - el?.id - ? !!document.getElementById(el.id) - : el?.getRootNode({ composed: true }) === mountState.document - -const createMountContainer = () => { - const container = document.createElement("div") - container.id = "plasmo-mount-container" - - container.style.cssText = ` - display: flex; - position: relative; - top: 0px; - left: 0px; - ` - - if (typeof Mount.getOverlayAnchor === "function") { - const updatePosition = async () => { - const anchor = await Mount.getOverlayAnchor() - - const rect = anchor?.getBoundingClientRect() - - if (!rect) { - return +const observer = createAnchorObserver(Mount) + +const render = createRender( + Mount, + [createInlineCSUIContainer, createOverlayCSUIContainer], + observer?.mountState, + async (anchor, rootContainer) => { + switch (anchor.type) { + case "inline": { + const mountPoint = createInlineCSUIContainer({ anchor }) + rootContainer.appendChild(mountPoint) + + const app = createApp(RawMount) + app.mount(mountPoint, { + anchor + }) + break } - - const pos = { - left: rect.left + window.scrollX, - top: rect.top + window.scrollY + case "overlay": { + const targetList = observer?.mountState.overlayTargetList || [ + anchor.element + ] + + targetList.forEach((target, i) => { + const id = `plasmo-overlay-${i}` + const innerAnchor: PlasmoCSUIAnchor = { + element: target, + type: "overlay" + } + + const mountPoint = createOverlayCSUIContainer({ + id, + anchor: innerAnchor, + watchOverlayAnchor: Mount.watchOverlayAnchor + }) + + rootContainer.appendChild(mountPoint) + + const app = createApp(RawMount) + app.mount(mountPoint, { + anchor: innerAnchor + }) + }) + break } - - container.style.top = `${pos.top}px` - container.style.left = `${pos.left}px` - } - - if (typeof Mount.watchOverlayAnchor === "function") { - Mount.watchOverlayAnchor(updatePosition) } - updatePosition() - window.addEventListener("scroll", updatePosition) - } - return container -} - -async function createShadowContainer() { - const container = document.createElement("div") - - container.id = "plasmo-shadow-container" - - const isInline = !!mountState.inlineAnchor - - container.style.cssText = ` - z-index: 2147483647; - position: ${isInline ? "relative" : "absolute"}; - ` - - const shadowHost = document.createElement("div") - - if (typeof Mount.getShadowHostId === "function") { - shadowHost.id = await Mount.getShadowHostId() - } - - const shadowRoot = - typeof Mount.createShadowRoot === "function" - ? await Mount.createShadowRoot(shadowHost) - : shadowHost.attachShadow({ mode: "open" }) - - mountState.shadowHost = shadowHost - - if (typeof Mount.mountShadowHost === "function") { - await Mount.mountShadowHost(mountState) - } else if (isInline) { - mountState.inlineAnchor?.insertAdjacentElement("afterend", shadowHost) - } else { - document.body.insertAdjacentElement("beforebegin", shadowHost) - } - - if (typeof Mount.getStyle === "function") { - shadowRoot.appendChild(await Mount.getStyle()) } +) - shadowRoot.appendChild(container) - return container -} - -const createRootContainer = - typeof Mount.getRootContainer === "function" - ? Mount.getRootContainer - : createShadowContainer - -const render = async () => { - const rootContainer = await createRootContainer() - const mountPoint = createMountContainer() - rootContainer.appendChild(mountPoint) - - const app = createApp(RawMount) - app.mount(mountPoint) -} - -const startObserver = () => { - mountState.observer = new MutationObserver(() => { - if (isMounted(mountState.shadowHost)) { - return - } - const inlineAnchor = Mount.getInlineAnchor() - if (!inlineAnchor) { - return - } - - mountState.inlineAnchor = inlineAnchor - render() - }) - - mountState.observer.observe(document.body, { - childList: true, - subtree: true - }) -} - -if (typeof Mount.render === "function") { - Mount.render(createRootContainer, createMountContainer) -} else if (typeof Mount.getInlineAnchor === "function") { - startObserver() +if (!!observer) { + observer.start(render) } else { - render() + render({ + element: document.body, + type: "overlay" + }) } From f2d317ee3c1f7902e84eba00a3cef085e355fd12 Mon Sep 17 00:00:00 2001 From: Louis <6723574+louisgv@users.noreply.github.com> Date: Mon, 17 Oct 2022 14:15:27 -0400 Subject: [PATCH 08/12] bump canary --- cli/create-plasmo/package.json | 2 +- cli/plasmo/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cli/create-plasmo/package.json b/cli/create-plasmo/package.json index 06d8a3017..262f7867a 100644 --- a/cli/create-plasmo/package.json +++ b/cli/create-plasmo/package.json @@ -1,6 +1,6 @@ { "name": "create-plasmo", - "version": "0.56.1", + "version": "0.57.0-alpha.0", "description": "Create Plasmo Framework Browser Extension", "main": "dist/index.js", "bin": "dist/index.js", diff --git a/cli/plasmo/package.json b/cli/plasmo/package.json index 08e72dd19..44556e047 100644 --- a/cli/plasmo/package.json +++ b/cli/plasmo/package.json @@ -1,6 +1,6 @@ { "name": "plasmo", - "version": "0.56.1", + "version": "0.57.0-alpha.0", "description": "The Plasmo Platform CLI", "main": "dist/index.js", "types": "dist/type.d.ts", From b6583d4da0b5c45f2cefd98ca7ae5ea9fbef4ee7 Mon Sep 17 00:00:00 2001 From: Louis <6723574+louisgv@users.noreply.github.com> Date: Mon, 17 Oct 2022 14:21:30 -0400 Subject: [PATCH 09/12] chore: bump deps --- cli/create-plasmo/package.json | 2 +- cli/plasmo/package.json | 6 +- .../extension-devtools/common-path.ts | 7 +- .../manifest-factory/create-manifest.ts | 15 +- .../features/manifest-factory/scaffolder.ts | 30 +- cli/plasmo/src/type.ts | 87 +- .../static/common/csui-container-react.tsx | 69 + .../static/common/csui-container-vanilla.tsx | 54 + cli/plasmo/templates/static/common/csui.ts | 290 ++ .../react17/content-script-ui-mount.tsx | 195 +- .../react18/content-script-ui-mount.tsx | 196 +- .../static/svelte3/content-script-ui-mount.ts | 188 +- .../static/vue3/content-script-ui-mount.ts | 184 +- cli/plasmo/tsconfig.json | 16 +- examples | 2 +- extensions/mice | 2 +- extensions/world-edit | 2 +- package.json | 10 +- packages/config | 2 +- packages/gcp-refresh-token | 2 +- packages/parcel-bundler/package.json | 2 +- packages/parcel-config/package.json | 2 +- packages/parcel-namer-manifest/package.json | 2 +- packages/parcel-packager/package.json | 2 +- packages/parcel-resolver/package.json | 7 +- .../src/handle-absolute-root.ts | 39 + .../src/handle-module-exports.ts | 22 + .../src/handle-plasmo-internal.ts | 28 + .../parcel-resolver/src/handle-tilde-src.ts | 23 +- packages/parcel-resolver/src/index.ts | 36 +- packages/parcel-resolver/src/shared.ts | 37 +- packages/parcel-runtime/package.json | 8 +- .../package.json | 2 +- .../package.json | 4 +- packages/parcel-transformer-lab/package.json | 2 +- .../parcel-transformer-manifest/package.json | 2 +- .../parcel-transformer-svelte3/package.json | 4 +- packages/parcel-transformer-vue3/package.json | 6 +- packages/permission-ui | 2 +- packages/prettier-plugin-sort-imports | 2 +- packages/puro | 2 +- packages/rps | 2 +- packages/storage | 2 +- packages/use-hashed-state | 2 +- pnpm-lock.yaml | 2562 +++++++++-------- templates/qtt | 2 +- 46 files changed, 2282 insertions(+), 1881 deletions(-) create mode 100644 cli/plasmo/templates/static/common/csui-container-react.tsx create mode 100644 cli/plasmo/templates/static/common/csui-container-vanilla.tsx create mode 100644 cli/plasmo/templates/static/common/csui.ts create mode 100644 packages/parcel-resolver/src/handle-absolute-root.ts create mode 100644 packages/parcel-resolver/src/handle-module-exports.ts create mode 100644 packages/parcel-resolver/src/handle-plasmo-internal.ts diff --git a/cli/create-plasmo/package.json b/cli/create-plasmo/package.json index 06d8a3017..262f7867a 100644 --- a/cli/create-plasmo/package.json +++ b/cli/create-plasmo/package.json @@ -1,6 +1,6 @@ { "name": "create-plasmo", - "version": "0.56.1", + "version": "0.57.0-alpha.0", "description": "Create Plasmo Framework Browser Extension", "main": "dist/index.js", "bin": "dist/index.js", diff --git a/cli/plasmo/package.json b/cli/plasmo/package.json index 08e72dd19..9cae4f2d3 100644 --- a/cli/plasmo/package.json +++ b/cli/plasmo/package.json @@ -1,6 +1,6 @@ { "name": "plasmo", - "version": "0.56.1", + "version": "0.57.0-alpha.0", "description": "The Plasmo Platform CLI", "main": "dist/index.js", "types": "dist/type.d.ts", @@ -42,14 +42,14 @@ "@plasmohq/parcel-config": "workspace:*", "archiver": "5.3.1", "buffer": "6.0.3", - "chalk": "5.1.0", + "chalk": "5.1.2", "change-case": "4.1.2", "dotenv": "16.0.3", "dotenv-expand": "9.0.0", "events": "3.3.0", "fflate": "0.7.4", "get-port": "6.1.2", - "got": "12.5.1", + "got": "12.5.2", "inquirer": "9.1.3", "is-path-inside": "4.0.0", "mnemonic-id": "3.2.7", diff --git a/cli/plasmo/src/features/extension-devtools/common-path.ts b/cli/plasmo/src/features/extension-devtools/common-path.ts index de7724506..116426a96 100644 --- a/cli/plasmo/src/features/extension-devtools/common-path.ts +++ b/cli/plasmo/src/features/extension-devtools/common-path.ts @@ -8,9 +8,10 @@ import { getBundleConfig } from "./get-bundle-config" export const getCommonPath = ( projectDirectory = cwd(), - { target } = getBundleConfig(), - dotPlasmo = ".plasmo" + { target } = getBundleConfig() ) => { + process.env.PLASMO_PROJECT_DIR = projectDirectory + const packageName = basename(projectDirectory) process.env.PLASMO_SRC_PATH = @@ -38,7 +39,7 @@ export const getCommonPath = ( const distDirectory = resolve(buildDirectory, distDirectoryName) - const dotPlasmoDirectory = resolve(projectDirectory, dotPlasmo) + const dotPlasmoDirectory = resolve(projectDirectory, ".plasmo") const cacheDirectory = resolve(dotPlasmoDirectory, "cache") diff --git a/cli/plasmo/src/features/manifest-factory/create-manifest.ts b/cli/plasmo/src/features/manifest-factory/create-manifest.ts index ac066ff7a..04f33874b 100644 --- a/cli/plasmo/src/features/manifest-factory/create-manifest.ts +++ b/cli/plasmo/src/features/manifest-factory/create-manifest.ts @@ -21,21 +21,18 @@ export async function createManifest(bundleConfig: PlasmoBundleConfig) { const contentIndex = contentIndexList.find(existsSync) const backgroundIndex = backgroundIndexList.find(existsSync) - const hasEntrypoints = await Promise.all([ - plasmoManifest.scaffolder.initTemplateFiles("popup"), - plasmoManifest.scaffolder.initTemplateFiles("options"), - plasmoManifest.scaffolder.initTemplateFiles("newtab"), - plasmoManifest.scaffolder.initTemplateFiles("devtools"), + const initResults = await Promise.all([ + plasmoManifest.scaffolder.init(), plasmoManifest.toggleContentScript(contentIndex, true), plasmoManifest.toggleBackground(backgroundIndex, true), plasmoManifest.addContentScriptsDirectory(), plasmoManifest.addTabsDirectory() ]) + const hasEntrypoints = initResults.flat() + if (!hasEntrypoints.includes(true)) { - wLog( - "Unable to find any entrypoints. You may end up with an empty extension..." - ) + wLog("Unable to find any entry files, the extension might be empty") } const [hasPopup, hasOptions, hasNewtab, hasDevtools] = hasEntrypoints @@ -43,8 +40,8 @@ export async function createManifest(bundleConfig: PlasmoBundleConfig) { plasmoManifest .togglePopup(hasPopup) .toggleOptions(hasOptions) - .toggleDevtools(hasDevtools) .toggleNewtab(hasNewtab) + .toggleDevtools(hasDevtools) await plasmoManifest.write(true) diff --git a/cli/plasmo/src/features/manifest-factory/scaffolder.ts b/cli/plasmo/src/features/manifest-factory/scaffolder.ts index 8fedd3b1f..4d4f3f4a9 100644 --- a/cli/plasmo/src/features/manifest-factory/scaffolder.ts +++ b/cli/plasmo/src/features/manifest-factory/scaffolder.ts @@ -1,5 +1,5 @@ import { existsSync } from "fs" -import { ensureDir } from "fs-extra" +import { copy, ensureDir } from "fs-extra" import { readFile, writeFile } from "fs/promises" import { ParsedPath, join, relative, resolve } from "path" @@ -31,7 +31,33 @@ export class Scaffolder { this.#plasmoManifest = plasmoManifest } - initTemplateFiles = async (uiPageName: ExtensionUIPage) => { + async init() { + const [_, ...uiPagesResult] = await Promise.all([ + this.#copyStaticCommon(), + this.#initUiPageTemplate("popup"), + this.#initUiPageTemplate("options"), + this.#initUiPageTemplate("newtab"), + this.#initUiPageTemplate("devtools") + ]) + + return uiPagesResult + } + + #copyStaticCommon = async () => { + const templateCommonDirectory = resolve( + this.#plasmoManifest.templatePath.staticTemplatePath, + "common" + ) + + const staticCommonDirectory = resolve( + this.commonPath.staticDirectory, + "common" + ) + + return copy(templateCommonDirectory, staticCommonDirectory) + } + + #initUiPageTemplate = async (uiPageName: ExtensionUIPage) => { vLog(`Creating static templates for ${uiPageName}`) const indexList = this.projectPath[`${uiPageName}IndexList`] diff --git a/cli/plasmo/src/type.ts b/cli/plasmo/src/type.ts index 6a0eb594f..3272ca4a8 100644 --- a/cli/plasmo/src/type.ts +++ b/cli/plasmo/src/type.ts @@ -5,50 +5,103 @@ export type PlasmoContentScript = Omit, "js"> type Async = Promise | T -type Getter = () => Async +type Getter = (props?: P) => Async -type GetHtmlElement = Getter +type GetElement = Getter -export type PlasmoGetRootContainer = GetHtmlElement -export type PlasmoGetOverlayAnchor = GetHtmlElement +export type PlasmoCSUIAnchor = { + element: Element + type: "overlay" | "inline" +} -export type PlasmoGetInlineAnchor = () => HTMLElement | null +export type PlasmoCSUIProps = { + anchor?: PlasmoCSUIAnchor +} export type PlasmoCSUIMountState = { document: Document observer: MutationObserver | null - shadowHost: Element | null - inlineAnchor: Element | null + + isMounting: boolean + isMutated: boolean + /** + * Used to quickly check if element is already mounted + */ + hostSet: Set + + /** + * Used to add more metadata to the host Set + */ + hostMap: WeakMap + + /** + * Used to align overlay anchor with elements on the page + */ + overlayTargetList: Element[] } -export type PlasmoMountShadowHost = ( - mountState: PlasmoCSUIMountState -) => Async +export type PlasmoGetRootContainer = ( + props: { + mountState?: PlasmoCSUIMountState + } & PlasmoCSUIProps +) => Async -export type PlasmoRender = ( - createRootContainer: GetHtmlElement, - MountContainer: () => JSX.Element | HTMLElement +export type PlasmoGetOverlayAnchor = GetElement +export type PlasmoGetOverlayAnchorList = Getter + +export type PlasmoGetInlineAnchor = GetElement +export type PlasmoGetInlineAnchorList = Getter + +export type PlasmoMountShadowHost = ( + props: { + observer: MutationObserver | null + shadowHost: Element + } & PlasmoCSUIProps ) => Async -export type PlasmoGetShadowHostId = Getter +export type PlasmoGetShadowHostId = Getter -export type PlasmoGetStyle = Getter +export type PlasmoGetStyle = Getter +/** + * @return a cleanup unwatch function that will be run when unmounted + */ export type PlasmoWatchOverlayAnchor = ( updatePosition: () => Promise -) => void +) => () => void + +export type PlasmoCSUIContainerProps = { + id?: string + children?: React.ReactNode + watchOverlayAnchor?: PlasmoWatchOverlayAnchor +} & PlasmoCSUIProps + +export type PlasmoCSUIContainer = ( + p: PlasmoCSUIContainerProps +) => JSX.Element | Element export type PlasmoCreateShadowRoot = ( - shadowHost: HTMLDivElement + shadowHost: HTMLElement ) => Async +export type PlasmoRender = ( + props: { + createRootContainer?: (p: PlasmoCSUIAnchor) => Async + } & PlasmoCSUIProps, + InlineCSUIContainer?: PlasmoCSUIContainer, + OverlayCSUIContainer?: PlasmoCSUIContainer +) => Async + export type PlasmoCSUI = { default: any getStyle: PlasmoGetStyle getShadowHostId: PlasmoGetShadowHostId getOverlayAnchor: PlasmoGetOverlayAnchor + getOverlayAnchorList: PlasmoGetOverlayAnchorList + getInlineAnchor: PlasmoGetInlineAnchor + getInlineAnchorList: PlasmoGetInlineAnchorList getRootContainer: PlasmoGetRootContainer diff --git a/cli/plasmo/templates/static/common/csui-container-react.tsx b/cli/plasmo/templates/static/common/csui-container-react.tsx new file mode 100644 index 000000000..69e4ded3c --- /dev/null +++ b/cli/plasmo/templates/static/common/csui-container-react.tsx @@ -0,0 +1,69 @@ +import React from "react" + +import type { PlasmoCSUIContainerProps } from "~type" + +export const OverlayCSUIContainer = (props: PlasmoCSUIContainerProps) => { + const [top, setTop] = React.useState(0) + const [left, setLeft] = React.useState(0) + + React.useEffect(() => { + // Handle overlay repositioning + if (props.anchor.type !== "overlay") { + return + } + + const updatePosition = async () => { + const rect = props.anchor.element.getBoundingClientRect() + + if (!rect) { + return + } + + const pos = { + left: rect.left + window.scrollX, + top: rect.top + window.scrollY + } + + setLeft(pos.left) + setTop(pos.top) + } + + updatePosition() + + const unwatch = props.watchOverlayAnchor?.(updatePosition) + window.addEventListener("scroll", updatePosition) + + return () => { + unwatch?.() + window.removeEventListener("scroll", updatePosition) + } + }, []) + + return ( +
+ {props.children} +
+ ) +} + +export const InlineCSUIContainer = (props: PlasmoCSUIContainerProps) => ( +
+ {props.children} +
+) diff --git a/cli/plasmo/templates/static/common/csui-container-vanilla.tsx b/cli/plasmo/templates/static/common/csui-container-vanilla.tsx new file mode 100644 index 000000000..1b4e9dd41 --- /dev/null +++ b/cli/plasmo/templates/static/common/csui-container-vanilla.tsx @@ -0,0 +1,54 @@ +import type { PlasmoCSUIContainerProps } from "~type" + +export const createOverlayCSUIContainer = (props: PlasmoCSUIContainerProps) => { + const container = document.createElement("div") + container.className = "plasmo-csui-container" + container.id = props.id + + container.style.cssText = ` + display: flex; + position: relative; + top: 0px; + left: 0px; + ` + + if (props.anchor.type === "overlay") { + const updatePosition = async () => { + const rect = props.anchor.element.getBoundingClientRect() + + if (!rect) { + return + } + + const pos = { + left: rect.left + window.scrollX, + top: rect.top + window.scrollY + } + + container.style.top = `${pos.top}px` + container.style.left = `${pos.left}px` + } + + updatePosition() + + props.watchOverlayAnchor?.(updatePosition) + window.addEventListener("scroll", updatePosition) + } + + return container +} + +export const createInlineCSUIContainer = (props: PlasmoCSUIContainerProps) => { + const container = document.createElement("div") + container.className = "plasmo-csui-container" + container.id = "plasmo-inline" + + container.style.cssText = ` + display: flex; + position: relative; + top: 0px; + left: 0px; + ` + + return container +} diff --git a/cli/plasmo/templates/static/common/csui.ts b/cli/plasmo/templates/static/common/csui.ts new file mode 100644 index 000000000..7be9d8d8f --- /dev/null +++ b/cli/plasmo/templates/static/common/csui.ts @@ -0,0 +1,290 @@ +import type { + PlasmoCSUI, + PlasmoCSUIAnchor, + PlasmoCSUIContainer, + PlasmoCSUIMountState +} from "~type" + +async function createShadowDOM(Mount: PlasmoCSUI) { + const shadowHost = document.createElement("plasmo-csui") + + const shadowRoot = + typeof Mount.createShadowRoot === "function" + ? await Mount.createShadowRoot(shadowHost) + : shadowHost.attachShadow({ mode: "open" }) + + const shadowContainer = document.createElement("div") + + shadowContainer.id = "plasmo-shadow-container" + shadowContainer.style.zIndex = "2147483647" + shadowContainer.style.position = "relative" + + shadowRoot.appendChild(shadowContainer) + + return { + shadowHost, + shadowRoot, + shadowContainer + } +} + +export type PlasmoCSUIShadowDOM = Awaited> + +async function injectAnchor( + Mount: PlasmoCSUI, + anchor: PlasmoCSUIAnchor, + { shadowHost, shadowRoot }: PlasmoCSUIShadowDOM, + mountState?: PlasmoCSUIMountState +) { + if (typeof Mount.getStyle === "function") { + shadowRoot.prepend(await Mount.getStyle(anchor)) + } + + if (typeof Mount.getShadowHostId === "function") { + shadowHost.id = await Mount.getShadowHostId(anchor) + } + + if (typeof Mount.mountShadowHost === "function") { + await Mount.mountShadowHost({ + shadowHost, + anchor, + observer: mountState?.observer + }) + } else if (anchor.type === "inline") { + anchor.element.insertAdjacentElement("afterend", shadowHost) + } else { + document.body.insertAdjacentElement("beforebegin", shadowHost) + } +} + +export async function createShadowContainer( + Mount: PlasmoCSUI, + anchor: PlasmoCSUIAnchor, + mountState?: PlasmoCSUIMountState +) { + const shadowDom = await createShadowDOM(Mount) + + mountState?.hostSet.add(shadowDom.shadowHost) + mountState?.hostMap.set(shadowDom.shadowHost, anchor) + + await injectAnchor(Mount, anchor, shadowDom, mountState) + + return shadowDom.shadowContainer +} + +export function createAnchorObserver(Mount: PlasmoCSUI) { + const mountState: PlasmoCSUIMountState = { + document: document || window.document, + observer: null, + + isMounting: false, + isMutated: false, + + hostSet: new Set(), + hostMap: new WeakMap(), + + overlayTargetList: [] + } + + const isMounted = (el: Element | null) => + el?.id + ? !!document.getElementById(el.id) + : el?.getRootNode({ composed: true }) === mountState.document + + const isVisible = (el: Element) => { + const elementRect = el.getBoundingClientRect() + const elementStyle = getComputedStyle(el) + + if (elementStyle.display === "none") { + return false + } + + if (elementStyle.visibility === "hidden") { + return false + } + + if (elementStyle.opacity === "0") { + return false + } + + if ( + elementRect.width === 0 && + elementRect.height === 0 && + elementStyle.overflow !== "hidden" + ) { + return false + } + + // Check if the element is irrevocably off-screen: + if ( + elementRect.x + elementRect.width < 0 || + elementRect.y + elementRect.height < 0 + ) { + return false + } + + return true + } + + const hasInlineAnchor = typeof Mount.getInlineAnchor === "function" + const hasOverlayAnchor = typeof Mount.getOverlayAnchor === "function" + + const hasInlineAnchorList = typeof Mount.getInlineAnchorList === "function" + const hasOverlayAnchorList = typeof Mount.getOverlayAnchorList === "function" + + const shouldObserve = + hasInlineAnchor || + hasOverlayAnchor || + hasInlineAnchorList || + hasOverlayAnchorList + + if (!shouldObserve) { + return null + } + + async function mountAnchors(render: (anchor?: PlasmoCSUIAnchor) => void) { + mountState.isMounting = true + + const mountedInlineAnchorSet = new WeakSet() + + // There should only be 1 overlay mount + let overlayHost: Element = null + + // Go through mounted sets and check if they are still mounted + for (const el of mountState.hostSet) { + if (isMounted(el)) { + const anchor = mountState.hostMap.get(el) + if (!!anchor) { + if (anchor.type === "inline") { + mountedInlineAnchorSet.add(anchor.element) + } else if (anchor.type === "overlay") { + overlayHost = el + } + } + } else { + mountState.hostSet.delete(el) + } + } + + const [inlineAnchor, inlineAnchorList, overlayAnchor, overlayAnchorList] = + await Promise.all([ + hasInlineAnchor ? Mount.getInlineAnchor() : null, + hasInlineAnchorList ? Mount.getInlineAnchorList() : null, + hasOverlayAnchor ? Mount.getOverlayAnchor() : null, + hasOverlayAnchorList ? Mount.getOverlayAnchorList() : null + ]) + + const renderList: PlasmoCSUIAnchor[] = [] + + if (!!inlineAnchor && !mountedInlineAnchorSet.has(inlineAnchor)) { + renderList.push({ + element: inlineAnchor, + type: "inline" + }) + } + + if ((inlineAnchorList?.length || 0) > 0) { + inlineAnchorList.forEach((inlineAnchor) => { + if ( + inlineAnchor instanceof Element && + !mountedInlineAnchorSet.has(inlineAnchor) + ) { + renderList.push({ + element: inlineAnchor, + type: "inline" + }) + } + }) + } + + const overlayTargetList = [] + + if (!!overlayAnchor && isVisible(overlayAnchor)) { + overlayTargetList.push(overlayAnchor) + } + + if ((overlayAnchorList?.length || 0) > 0) { + overlayAnchorList.forEach((el) => { + if (el instanceof Element && isVisible(el)) { + overlayTargetList.push(el) + } + }) + } + + if (overlayTargetList.length > 0) { + mountState.overlayTargetList = overlayTargetList + if (!overlayHost) { + renderList.push({ + element: document.body, + type: "overlay" + }) + } else { + // force re-render + } + } else { + overlayHost?.remove() + mountState.hostSet.delete(overlayHost) + } + + await Promise.all(renderList.map(render)) + + if (mountState.isMutated) { + mountState.isMutated = false + await mountAnchors(render) + } + + mountState.isMounting = false + } + + const start = (render: (anchor?: PlasmoCSUIAnchor) => void) => { + mountState.observer = new MutationObserver(() => { + if (mountState.isMounting) { + mountState.isMutated = true + return + } + mountAnchors(render) + }) + + // Need to watch the subtree for shadowDOM + mountState.observer.observe(document.body, { + childList: true, + subtree: true + }) + } + + return { + start, + mountState + } +} + +export const createRender = ( + Mount: PlasmoCSUI, + containers: [PlasmoCSUIContainer, PlasmoCSUIContainer], + mountState?: PlasmoCSUIMountState, + renderFx?: (anchor: PlasmoCSUIAnchor, rootContainer: Element) => Promise +) => { + const createRootContainer = (anchor: PlasmoCSUIAnchor) => + typeof Mount.getRootContainer === "function" + ? Mount.getRootContainer({ + anchor, + mountState + }) + : createShadowContainer(Mount, anchor, mountState) + + if (typeof Mount.render === "function") { + return (anchor: PlasmoCSUIAnchor) => + Mount.render( + { + anchor, + createRootContainer + }, + ...containers + ) + } + + return async (anchor: PlasmoCSUIAnchor) => { + const rootContainer = await createRootContainer(anchor) + return renderFx(anchor, rootContainer) + } +} diff --git a/cli/plasmo/templates/static/react17/content-script-ui-mount.tsx b/cli/plasmo/templates/static/react17/content-script-ui-mount.tsx index 8613b88da..03d3371c0 100644 --- a/cli/plasmo/templates/static/react17/content-script-ui-mount.tsx +++ b/cli/plasmo/templates/static/react17/content-script-ui-mount.tsx @@ -1,155 +1,74 @@ +import { createAnchorObserver, createRender } from "@plasmo-static-common/csui" +import { + InlineCSUIContainer, + OverlayCSUIContainer +} from "@plasmo-static-common/csui-container-react" import React from "react" +import * as ReactDOM from "react-dom" // prettier-sort-ignore // @ts-ignore import * as RawMount from "__plasmo_mount_content_script__" -import * as ReactDOM from "react-dom" - -import type { PlasmoCSUI, PlasmoCSUIMountState } from "../../../src/type" +import type { PlasmoCSUI, PlasmoCSUIAnchor } from "~type" // Escape parcel's static analyzer const Mount = RawMount as PlasmoCSUI -const mountState: PlasmoCSUIMountState = { - document: document || window.document, - observer: null, - shadowHost: null, - // cached anchors: - inlineAnchor: null -} - -const isMounted = (el: Element | null) => - el?.id - ? !!document.getElementById(el.id) - : el?.getRootNode({ composed: true }) === mountState.document - -const MountContainer = () => { - const [top, setTop] = React.useState(0) - const [left, setLeft] = React.useState(0) - - React.useEffect(() => { - if (typeof Mount.getOverlayAnchor !== "function") { - return - } - const updatePosition = async () => { - const anchor = await Mount.getOverlayAnchor() - - const rect = anchor?.getBoundingClientRect() - - if (!rect) { - return +const observer = createAnchorObserver(Mount) + +const render = createRender( + Mount, + [InlineCSUIContainer, OverlayCSUIContainer], + observer?.mountState, + async (anchor, rootContainer) => { + switch (anchor.type) { + case "inline": { + ReactDOM.render( + + + , + rootContainer + ) + break } - - const pos = { - left: rect.left + window.scrollX, - top: rect.top + window.scrollY + case "overlay": { + const targetList = observer?.mountState.overlayTargetList || [ + anchor.element + ] + + ReactDOM.render( + <> + {targetList.map((target, i) => { + const id = `plasmo-overlay-${i}` + const innerAnchor: PlasmoCSUIAnchor = { + element: target, + type: "overlay" + } + return ( + + + + ) + })} + , + rootContainer + ) + break } - - setLeft(pos.left) - setTop(pos.top) } - - updatePosition() - - if (typeof Mount.watchOverlayAnchor === "function") { - Mount.watchOverlayAnchor(updatePosition) - } - - window.addEventListener("scroll", updatePosition) - - return () => window.removeEventListener("scroll", updatePosition) - }, []) - - return ( -
- -
- ) -} - -async function createShadowContainer() { - const container = document.createElement("div") - - container.id = "plasmo-shadow-container" - - const isInline = !!mountState.inlineAnchor - - container.style.cssText = ` - z-index: 2147483647; - position: ${isInline ? "relative" : "absolute"}; - ` - - const shadowHost = document.createElement("div") - - if (typeof Mount.getShadowHostId === "function") { - shadowHost.id = await Mount.getShadowHostId() - } - - const shadowRoot = - typeof Mount.createShadowRoot === "function" - ? await Mount.createShadowRoot(shadowHost) - : shadowHost.attachShadow({ mode: "open" }) - - mountState.shadowHost = shadowHost - - if (typeof Mount.mountShadowHost === "function") { - await Mount.mountShadowHost(mountState) - } else if (isInline) { - mountState.inlineAnchor?.insertAdjacentElement("afterend", shadowHost) - } else { - document.body.insertAdjacentElement("beforebegin", shadowHost) } +) - if (typeof Mount.getStyle === "function") { - shadowRoot.appendChild(await Mount.getStyle()) - } - - shadowRoot.appendChild(container) - return container -} - -const createRootContainer = - typeof Mount.getRootContainer === "function" - ? Mount.getRootContainer - : createShadowContainer - -const render = async () => { - const rootContainer = await createRootContainer() - ReactDOM.render(, rootContainer) -} - -const startObserver = () => { - mountState.observer = new MutationObserver(() => { - if (isMounted(mountState.shadowHost)) { - return - } - const inlineAnchor = Mount.getInlineAnchor() - if (!inlineAnchor) { - return - } - - mountState.inlineAnchor = inlineAnchor - render() - }) - - mountState.observer.observe(document.body, { - childList: true, - subtree: true - }) -} - -if (typeof Mount.render === "function") { - Mount.render(createRootContainer, MountContainer) -} else if (typeof Mount.getInlineAnchor === "function") { - startObserver() +if (!!observer) { + observer.start(render) } else { - render() + render({ + element: document.body, + type: "overlay" + }) } diff --git a/cli/plasmo/templates/static/react18/content-script-ui-mount.tsx b/cli/plasmo/templates/static/react18/content-script-ui-mount.tsx index 537aa1411..74ed9efa1 100644 --- a/cli/plasmo/templates/static/react18/content-script-ui-mount.tsx +++ b/cli/plasmo/templates/static/react18/content-script-ui-mount.tsx @@ -1,3 +1,8 @@ +import { createAnchorObserver, createRender } from "@plasmo-static-common/csui" +import { + InlineCSUIContainer, + OverlayCSUIContainer +} from "@plasmo-static-common/csui-container-react" import React from "react" import { createRoot } from "react-dom/client" @@ -5,155 +10,64 @@ import { createRoot } from "react-dom/client" // @ts-ignore import * as RawMount from "__plasmo_mount_content_script__" -import type { PlasmoCSUI, PlasmoCSUIMountState } from "../../../src/type" +import type { PlasmoCSUI, PlasmoCSUIAnchor } from "~type" // Escape parcel's static analyzer const Mount = RawMount as PlasmoCSUI -const mountState: PlasmoCSUIMountState = { - document: document || window.document, - observer: null, - shadowHost: null, - // cached anchors: - inlineAnchor: null -} - -const isMounted = (el: Element | null) => - el?.id - ? !!document.getElementById(el.id) - : el?.getRootNode({ composed: true }) === mountState.document - -const MountContainer = () => { - const [top, setTop] = React.useState(0) - const [left, setLeft] = React.useState(0) - - React.useEffect(() => { - if (typeof Mount.getOverlayAnchor !== "function") { - return - } - - const updatePosition = async () => { - const anchor = await Mount.getOverlayAnchor() - - const rect = anchor?.getBoundingClientRect() - - if (!rect) { - return +const observer = createAnchorObserver(Mount) + +const render = createRender( + Mount, + [InlineCSUIContainer, OverlayCSUIContainer], + observer?.mountState, + async (anchor, rootContainer) => { + const root = createRoot(rootContainer) + switch (anchor.type) { + case "inline": { + root.render( + + + + ) + break } - - const pos = { - left: rect.left + window.scrollX, - top: rect.top + window.scrollY + case "overlay": { + const targetList = observer.mountState?.overlayTargetList || [ + anchor.element + ] + + root.render( + <> + {targetList.map((target, i) => { + const id = `plasmo-overlay-${i}` + const innerAnchor: PlasmoCSUIAnchor = { + element: target, + type: "overlay" + } + return ( + + + + ) + })} + + ) + break } - - setLeft(pos.left) - setTop(pos.top) - } - - updatePosition() - - if (typeof Mount.watchOverlayAnchor === "function") { - Mount.watchOverlayAnchor(updatePosition) } - - window.addEventListener("scroll", updatePosition) - - return () => window.removeEventListener("scroll", updatePosition) - }, []) - - return ( -
- -
- ) -} - -async function createShadowContainer() { - const container = document.createElement("div") - - container.id = "plasmo-shadow-container" - - const isInline = !!mountState.inlineAnchor - - container.style.cssText = ` - z-index: 2147483647; - position: ${isInline ? "relative" : "absolute"}; - ` - - const shadowHost = document.createElement("div") - - if (typeof Mount.getShadowHostId === "function") { - shadowHost.id = await Mount.getShadowHostId() - } - - const shadowRoot = - typeof Mount.createShadowRoot === "function" - ? await Mount.createShadowRoot(shadowHost) - : shadowHost.attachShadow({ mode: "open" }) - - mountState.shadowHost = shadowHost - - if (typeof Mount.mountShadowHost === "function") { - await Mount.mountShadowHost(mountState) - } else if (isInline) { - mountState.inlineAnchor?.insertAdjacentElement("afterend", shadowHost) - } else { - document.body.insertAdjacentElement("beforebegin", shadowHost) } +) - if (typeof Mount.getStyle === "function") { - shadowRoot.appendChild(await Mount.getStyle()) - } - - shadowRoot.appendChild(container) - return container -} - -const createRootContainer = - typeof Mount.getRootContainer === "function" - ? Mount.getRootContainer - : createShadowContainer - -const render = async () => { - const rootContainer = await createRootContainer() - const root = createRoot(rootContainer) - root.render() -} - -const startObserver = () => { - mountState.observer = new MutationObserver(() => { - // This should be O(1) if shadowHost cached its root. - // Otherwise, it's O(n) where n is how deep it's nested within the DOM. - if (isMounted(mountState.shadowHost)) { - return - } - const inlineAnchor = Mount.getInlineAnchor() - if (!inlineAnchor) { - return - } - - mountState.inlineAnchor = inlineAnchor - render() - }) - - // Need to watch the subtree for shadowDOM - mountState.observer.observe(document.body, { - childList: true, - subtree: true - }) -} - -if (typeof Mount.render === "function") { - Mount.render(createRootContainer, MountContainer) -} else if (typeof Mount.getInlineAnchor === "function") { - startObserver() +if (!!observer) { + observer.start(render) } else { - render() + render({ + element: document.body, + type: "overlay" + }) } diff --git a/cli/plasmo/templates/static/svelte3/content-script-ui-mount.ts b/cli/plasmo/templates/static/svelte3/content-script-ui-mount.ts index 03a4c4f19..21f3967f0 100644 --- a/cli/plasmo/templates/static/svelte3/content-script-ui-mount.ts +++ b/cli/plasmo/templates/static/svelte3/content-script-ui-mount.ts @@ -1,144 +1,74 @@ +import { createAnchorObserver, createRender } from "@plasmo-static-common/csui" +import { + createInlineCSUIContainer, + createOverlayCSUIContainer +} from "@plasmo-static-common/csui-container-vanilla" + // prettier-sort-ignore // @ts-ignore import * as RawMount from "__plasmo_mount_content_script__" -import type { PlasmoCSUI, PlasmoCSUIMountState } from "../../../src/type" +import type { PlasmoCSUI, PlasmoCSUIAnchor } from "~type" // Escape parcel's static analyzer const Mount = RawMount as PlasmoCSUI -const mountState: PlasmoCSUIMountState = { - document: document || window.document, - observer: null, - shadowHost: null, - // cached anchors: - inlineAnchor: null -} - -const isMounted = (el: Element | null) => - el?.id - ? !!document.getElementById(el.id) - : el?.getRootNode({ composed: true }) === mountState.document - -const createMountContainer = () => { - const container = document.createElement("div") - container.id = "plasmo-mount-container" - - container.style.cssText = ` - display: flex; - position: relative; - top: 0px; - left: 0px; - ` - - if (typeof Mount.getOverlayAnchor === "function") { - const updatePosition = async () => { - const anchor = await Mount.getOverlayAnchor() - - const rect = anchor?.getBoundingClientRect() - - if (!rect) { - return +const observer = createAnchorObserver(Mount) + +const render = createRender( + Mount, + [createInlineCSUIContainer, createOverlayCSUIContainer], + observer?.mountState, + async (anchor, rootContainer) => { + switch (anchor.type) { + case "inline": { + const mountPoint = createInlineCSUIContainer({ anchor }) + rootContainer.appendChild(mountPoint) + new Mount.default({ + target: mountPoint, + props: { + anchor + } + }) + break } - - const pos = { - left: rect.left + window.scrollX, - top: rect.top + window.scrollY + case "overlay": { + const targetList = observer?.mountState.overlayTargetList || [ + anchor.element + ] + + targetList.forEach((target, i) => { + const id = `plasmo-overlay-${i}` + const innerAnchor: PlasmoCSUIAnchor = { + element: target, + type: "overlay" + } + + const mountPoint = createOverlayCSUIContainer({ + id, + anchor: innerAnchor, + watchOverlayAnchor: Mount.watchOverlayAnchor + }) + + rootContainer.appendChild(mountPoint) + new Mount.default({ + target: mountPoint, + props: { + anchor: innerAnchor + } + }) + }) + break } - - container.style.top = `${pos.top}px` - container.style.left = `${pos.left}px` } - - if (typeof Mount.watchOverlayAnchor === "function") { - Mount.watchOverlayAnchor(updatePosition) - } - - updatePosition() - window.addEventListener("scroll", updatePosition) - } - return container -} - -async function createShadowContainer() { - const container = document.createElement("div") - - container.id = "plasmo-shadow-container" - - const isInline = !!mountState.inlineAnchor - - container.style.cssText = ` - z-index: 2147483647; - position: ${isInline ? "relative" : "absolute"}; - ` - - const shadowHost = document.createElement("div") - - if (typeof Mount.getShadowHostId === "function") { - shadowHost.id = await Mount.getShadowHostId() } +) - const shadowRoot = - typeof Mount.createShadowRoot === "function" - ? await Mount.createShadowRoot(shadowHost) - : shadowHost.attachShadow({ mode: "open" }) - - mountState.shadowHost = shadowHost - - if (typeof Mount.mountShadowHost === "function") { - await Mount.mountShadowHost(mountState) - } else if (isInline) { - mountState.inlineAnchor?.insertAdjacentElement("afterend", shadowHost) - } else { - document.body.insertAdjacentElement("beforebegin", shadowHost) - } - - if (typeof Mount.getStyle === "function") { - shadowRoot.appendChild(await Mount.getStyle()) - } - - shadowRoot.appendChild(container) - return container -} - -const createRootContainer = - typeof Mount.getRootContainer === "function" - ? Mount.getRootContainer - : createShadowContainer - -const render = async () => { - const rootContainer = await createRootContainer() - const mountPoint = createMountContainer() - rootContainer.appendChild(mountPoint) - new Mount.default({ - target: mountPoint - }) -} - -const startObserver = () => { - mountState.observer = new MutationObserver(() => { - if (isMounted(mountState.shadowHost)) { - return - } - const inlineAnchor = Mount.getInlineAnchor() - if (!inlineAnchor) { - return - } - - mountState.inlineAnchor = inlineAnchor - render() - }) - - mountState.observer.observe(document.body, { - childList: true, - subtree: true - }) -} - -if (typeof Mount.render === "function") { - Mount.render(createRootContainer, createMountContainer) -} else if (typeof Mount.getInlineAnchor === "function") { - startObserver() +if (!!observer) { + observer.start(render) } else { - render() + render({ + element: document.body, + type: "overlay" + }) } diff --git a/cli/plasmo/templates/static/vue3/content-script-ui-mount.ts b/cli/plasmo/templates/static/vue3/content-script-ui-mount.ts index 1a8e026e8..118dcf3a0 100644 --- a/cli/plasmo/templates/static/vue3/content-script-ui-mount.ts +++ b/cli/plasmo/templates/static/vue3/content-script-ui-mount.ts @@ -1,3 +1,8 @@ +import { createAnchorObserver, createRender } from "@plasmo-static-common/csui" +import { + createInlineCSUIContainer, + createOverlayCSUIContainer +} from "@plasmo-static-common/csui-container-vanilla" // @ts-ignore import { createApp } from "vue" @@ -5,142 +10,65 @@ import { createApp } from "vue" // @ts-ignore import RawMount from "__plasmo_mount_content_script__" -import type { PlasmoCSUI, PlasmoCSUIMountState } from "../../../src/type" +import type { PlasmoCSUI, PlasmoCSUIAnchor } from "~type" // Escape parcel's static analyzer const Mount = RawMount.plasmo as PlasmoCSUI -const mountState: PlasmoCSUIMountState = { - document: document || window.document, - observer: null, - shadowHost: null, - // cached anchors: - inlineAnchor: null -} - -const isMounted = (el: Element | null) => - el?.id - ? !!document.getElementById(el.id) - : el?.getRootNode({ composed: true }) === mountState.document - -const createMountContainer = () => { - const container = document.createElement("div") - container.id = "plasmo-mount-container" - - container.style.cssText = ` - display: flex; - position: relative; - top: 0px; - left: 0px; - ` - - if (typeof Mount.getOverlayAnchor === "function") { - const updatePosition = async () => { - const anchor = await Mount.getOverlayAnchor() - - const rect = anchor?.getBoundingClientRect() - - if (!rect) { - return +const observer = createAnchorObserver(Mount) + +const render = createRender( + Mount, + [createInlineCSUIContainer, createOverlayCSUIContainer], + observer?.mountState, + async (anchor, rootContainer) => { + switch (anchor.type) { + case "inline": { + const mountPoint = createInlineCSUIContainer({ anchor }) + rootContainer.appendChild(mountPoint) + + const app = createApp(RawMount) + app.mount(mountPoint, { + anchor + }) + break } - - const pos = { - left: rect.left + window.scrollX, - top: rect.top + window.scrollY + case "overlay": { + const targetList = observer?.mountState.overlayTargetList || [ + anchor.element + ] + + targetList.forEach((target, i) => { + const id = `plasmo-overlay-${i}` + const innerAnchor: PlasmoCSUIAnchor = { + element: target, + type: "overlay" + } + + const mountPoint = createOverlayCSUIContainer({ + id, + anchor: innerAnchor, + watchOverlayAnchor: Mount.watchOverlayAnchor + }) + + rootContainer.appendChild(mountPoint) + + const app = createApp(RawMount) + app.mount(mountPoint, { + anchor: innerAnchor + }) + }) + break } - - container.style.top = `${pos.top}px` - container.style.left = `${pos.left}px` - } - - if (typeof Mount.watchOverlayAnchor === "function") { - Mount.watchOverlayAnchor(updatePosition) } - updatePosition() - window.addEventListener("scroll", updatePosition) - } - return container -} - -async function createShadowContainer() { - const container = document.createElement("div") - - container.id = "plasmo-shadow-container" - - const isInline = !!mountState.inlineAnchor - - container.style.cssText = ` - z-index: 2147483647; - position: ${isInline ? "relative" : "absolute"}; - ` - - const shadowHost = document.createElement("div") - - if (typeof Mount.getShadowHostId === "function") { - shadowHost.id = await Mount.getShadowHostId() - } - - const shadowRoot = - typeof Mount.createShadowRoot === "function" - ? await Mount.createShadowRoot(shadowHost) - : shadowHost.attachShadow({ mode: "open" }) - - mountState.shadowHost = shadowHost - - if (typeof Mount.mountShadowHost === "function") { - await Mount.mountShadowHost(mountState) - } else if (isInline) { - mountState.inlineAnchor?.insertAdjacentElement("afterend", shadowHost) - } else { - document.body.insertAdjacentElement("beforebegin", shadowHost) - } - - if (typeof Mount.getStyle === "function") { - shadowRoot.appendChild(await Mount.getStyle()) } +) - shadowRoot.appendChild(container) - return container -} - -const createRootContainer = - typeof Mount.getRootContainer === "function" - ? Mount.getRootContainer - : createShadowContainer - -const render = async () => { - const rootContainer = await createRootContainer() - const mountPoint = createMountContainer() - rootContainer.appendChild(mountPoint) - - const app = createApp(RawMount) - app.mount(mountPoint) -} - -const startObserver = () => { - mountState.observer = new MutationObserver(() => { - if (isMounted(mountState.shadowHost)) { - return - } - const inlineAnchor = Mount.getInlineAnchor() - if (!inlineAnchor) { - return - } - - mountState.inlineAnchor = inlineAnchor - render() - }) - - mountState.observer.observe(document.body, { - childList: true, - subtree: true - }) -} - -if (typeof Mount.render === "function") { - Mount.render(createRootContainer, createMountContainer) -} else if (typeof Mount.getInlineAnchor === "function") { - startObserver() +if (!!observer) { + observer.start(render) } else { - render() + render({ + element: document.body, + type: "overlay" + }) } diff --git a/cli/plasmo/tsconfig.json b/cli/plasmo/tsconfig.json index 57e8ea89f..118a0a61c 100644 --- a/cli/plasmo/tsconfig.json +++ b/cli/plasmo/tsconfig.json @@ -1,10 +1,20 @@ { "extends": "@plasmo/config/ts/cli.json", - "include": ["src/**/*.ts", "./index.d.ts"], - "exclude": ["dist", "node_modules", "templates"], + "include": [ + "src/**/*.ts", + "./index.d.ts", + "templates/**/*.ts", + "templates/**/*.tsx" + ], + "exclude": ["dist", "node_modules"], "compilerOptions": { "outDir": "dist", "baseUrl": ".", - "lib": ["es2022", "dom"] + "lib": ["es2022", "dom"], + "jsx": "preserve", + "paths": { + "~*": ["./src/*"], + "@plasmo-static-common/*": ["./templates/static/common/*"] + } } } diff --git a/examples b/examples index 6058c8e74..83d09058a 160000 --- a/examples +++ b/examples @@ -1 +1 @@ -Subproject commit 6058c8e74771223c037e3cf316d3a0e2819a1483 +Subproject commit 83d09058a9a00923ce7b368d828dfd8b010ddb8f diff --git a/extensions/mice b/extensions/mice index dd8ab106f..5c148c9fc 160000 --- a/extensions/mice +++ b/extensions/mice @@ -1 +1 @@ -Subproject commit dd8ab106fad70c876944dd2b291f4babc09157cd +Subproject commit 5c148c9fc5edb89a68d4460826492bd52e681ea4 diff --git a/extensions/world-edit b/extensions/world-edit index cc5fcb042..d4e48b578 160000 --- a/extensions/world-edit +++ b/extensions/world-edit @@ -1 +1 @@ -Subproject commit cc5fcb04207eb4e08dcba3fb40e397d803ed9975 +Subproject commit d4e48b5784274fe5709bc9cc3d89480cd4d153e1 diff --git a/package.json b/package.json index 84392485f..c30b629d2 100644 --- a/package.json +++ b/package.json @@ -35,21 +35,21 @@ "@types/archiver": "5.3.1", "@types/fs-extra": "9.0.13", "@types/inquirer": "9.0.2", - "@types/node": "18.8.3", + "@types/node": "18.11.0", "@types/node-rsa": "1.1.1", "@types/react": "18.0.21", "@types/react-dom": "18.0.6", "@types/semver": "7.3.12", "@types/sharp": "0.31.0", "@types/uuid": "8.3.4", - "esbuild": "0.15.10", + "esbuild": "0.15.11", "eslint": "8.25.0", "eslint-config-prettier": "8.5.0", - "eslint-plugin-react": "7.31.8", + "eslint-plugin-react": "7.31.10", "fs-extra": "10.1.0", "prettier": "2.7.1", - "tsup": "6.2.3", - "turbo": "1.5.5" + "tsup": "6.3.0", + "turbo": "1.5.6" }, "engines": { "npm": ">=7.0.0", diff --git a/packages/config b/packages/config index 534ce1576..5018afcb9 160000 --- a/packages/config +++ b/packages/config @@ -1 +1 @@ -Subproject commit 534ce1576460d17e252b5a60a69a4ef15e3a3bdc +Subproject commit 5018afcb965dc26f9aa2f382ac86637b9d03f061 diff --git a/packages/gcp-refresh-token b/packages/gcp-refresh-token index 70324183a..97948dec4 160000 --- a/packages/gcp-refresh-token +++ b/packages/gcp-refresh-token @@ -1 +1 @@ -Subproject commit 70324183aac7b3243e5977584bb8de50527ff87e +Subproject commit 97948dec412b89f2bb45700332a51bd0bde56f46 diff --git a/packages/parcel-bundler/package.json b/packages/parcel-bundler/package.json index e33bc20a6..b92b86541 100644 --- a/packages/parcel-bundler/package.json +++ b/packages/parcel-bundler/package.json @@ -28,6 +28,6 @@ "devDependencies": { "@parcel/types": "2.7.0", "@plasmo/config": "workspace:*", - "tsup": "6.2.3" + "tsup": "6.3.0" } } diff --git a/packages/parcel-config/package.json b/packages/parcel-config/package.json index 6e7b1d23f..f2837e5c2 100644 --- a/packages/parcel-config/package.json +++ b/packages/parcel-config/package.json @@ -1,6 +1,6 @@ { "name": "@plasmohq/parcel-config", - "version": "0.17.0", + "version": "0.18.0", "license": "MIT", "repository": { "type": "git", diff --git a/packages/parcel-namer-manifest/package.json b/packages/parcel-namer-manifest/package.json index 12fae5569..ab9b19210 100644 --- a/packages/parcel-namer-manifest/package.json +++ b/packages/parcel-namer-manifest/package.json @@ -23,7 +23,7 @@ }, "devDependencies": { "@plasmo/config": "workspace:*", - "tsup": "6.2.3" + "tsup": "6.3.0" }, "dependencies": { "@parcel/core": "2.7.0", diff --git a/packages/parcel-packager/package.json b/packages/parcel-packager/package.json index 9d4433f6d..09f895789 100644 --- a/packages/parcel-packager/package.json +++ b/packages/parcel-packager/package.json @@ -24,7 +24,7 @@ "devDependencies": { "@plasmo/config": "workspace:*", "@plasmo/constants": "workspace:*", - "tsup": "6.2.3" + "tsup": "6.3.0" }, "dependencies": { "@parcel/core": "2.7.0", diff --git a/packages/parcel-resolver/package.json b/packages/parcel-resolver/package.json index 281a5cca7..01a97b372 100644 --- a/packages/parcel-resolver/package.json +++ b/packages/parcel-resolver/package.json @@ -1,6 +1,6 @@ { "name": "@plasmohq/parcel-resolver", - "version": "0.5.4", + "version": "0.6.0", "description": "Plasmo Parcel Resolver", "files": [ "dist" @@ -23,12 +23,13 @@ }, "devDependencies": { "@plasmo/config": "workspace:*", - "tsup": "6.2.3" + "tsup": "6.3.0" }, "dependencies": { "@parcel/core": "2.7.0", "@parcel/hash": "2.7.0", "@parcel/plugin": "2.7.0", - "got": "12.5.1" + "@parcel/types": "2.7.0", + "got": "12.5.2" } } diff --git a/packages/parcel-resolver/src/handle-absolute-root.ts b/packages/parcel-resolver/src/handle-absolute-root.ts new file mode 100644 index 000000000..bc9a5b240 --- /dev/null +++ b/packages/parcel-resolver/src/handle-absolute-root.ts @@ -0,0 +1,39 @@ +import { extname, isAbsolute, resolve } from "path" + +import { + ResolverProps, + ResolverResult, + relevantExtensionList, + resolveSourceIndex +} from "./shared" + +export async function handleAbsoluteRoot({ + specifier, + dependency +}: ResolverProps): Promise { + if (specifier[0] !== "/" || isAbsolute(specifier)) { + return null + } + + const absoluteBaseFile = resolve( + process.env.PLASMO_PROJECT_DIR, + specifier.slice(1) + ) + + const importExt = extname(absoluteBaseFile) + + if (importExt.length > 0) { + return { + filePath: absoluteBaseFile + } + } + + const parentExt = extname(dependency.resolveFrom) + + const checkingExts = [ + parentExt, + ...relevantExtensionList.filter((ext) => ext !== parentExt) + ] + + return resolveSourceIndex(absoluteBaseFile, checkingExts) +} diff --git a/packages/parcel-resolver/src/handle-module-exports.ts b/packages/parcel-resolver/src/handle-module-exports.ts new file mode 100644 index 000000000..fd31beb76 --- /dev/null +++ b/packages/parcel-resolver/src/handle-module-exports.ts @@ -0,0 +1,22 @@ +import type { ResolverProps, ResolverResult } from "./shared" + +export async function handleModuleExport({ + specifier, + dependency +}: ResolverProps): Promise { + try { + const segments = specifier.split("/") + + if (segments.length > 2) { + const filePath = require.resolve(specifier, { + paths: [dependency.resolveFrom] + }) + + return { + filePath + } + } + } catch {} + + return null +} diff --git a/packages/parcel-resolver/src/handle-plasmo-internal.ts b/packages/parcel-resolver/src/handle-plasmo-internal.ts new file mode 100644 index 000000000..e90c54fc6 --- /dev/null +++ b/packages/parcel-resolver/src/handle-plasmo-internal.ts @@ -0,0 +1,28 @@ +import { resolve } from "path" + +import { + ResolverProps, + ResolverResult, + resolveSourceIndex, + state +} from "./shared" + +const resolveByPrefix = (specifier = "", prefix = "", prefixPath = "") => { + if (!specifier.startsWith(prefix)) { + return null + } + + const [_, specifierPath] = specifier.split(prefix) + + return resolveSourceIndex(resolve(prefixPath, specifierPath)) +} + +export async function handlePlasmoInternal({ + specifier +}: ResolverProps): Promise { + return resolveByPrefix( + specifier, + "@plasmo-static-common/", + resolve(state.dotPlasmoDirectory, "static", "common") + ) +} diff --git a/packages/parcel-resolver/src/handle-tilde-src.ts b/packages/parcel-resolver/src/handle-tilde-src.ts index 636650170..2e46fcdee 100644 --- a/packages/parcel-resolver/src/handle-tilde-src.ts +++ b/packages/parcel-resolver/src/handle-tilde-src.ts @@ -6,7 +6,7 @@ import { ResolverResult, relevantExtensionList, relevantExtensionSet, - state + resolveSourceIndex } from "./shared" export async function handleTildeSrc({ @@ -17,10 +17,14 @@ export async function handleTildeSrc({ return null } - const absoluteBaseFile = resolve(state.srcDir, specifier.slice(1)) + const absoluteBaseFile = resolve( + process.env.PLASMO_SRC_DIR, + specifier.slice(1) + ) const importExt = extname(absoluteBaseFile) + // TODO: Potentially resolve other type of files (less import etc...) that Parcel doesn't account for if (importExt.length > 0 && relevantExtensionSet.has(importExt as any)) { return { filePath: absoluteBaseFile @@ -36,20 +40,7 @@ export async function handleTildeSrc({ ...relevantExtensionList.filter((ext) => ext !== parentExt) ] - const potentialFiles = checkingExts.flatMap((ext) => [ - `${absoluteBaseFile}${ext}`, - resolve(absoluteBaseFile, `index${ext}`) - ]) - // console.log(`tildeSrc: ${potentialFiles}`) - for (const file of potentialFiles) { - try { - if (statSync(file).isFile()) { - return { filePath: file } - } - } catch {} - } - - return null + return resolveSourceIndex(absoluteBaseFile, checkingExts) } diff --git a/packages/parcel-resolver/src/index.ts b/packages/parcel-resolver/src/index.ts index 1200bb801..8551ed0ca 100644 --- a/packages/parcel-resolver/src/index.ts +++ b/packages/parcel-resolver/src/index.ts @@ -1,5 +1,8 @@ import { Resolver } from "@parcel/plugin" +import { handleAbsoluteRoot } from "./handle-absolute-root" +import { handleModuleExport } from "./handle-module-exports" +import { handlePlasmoInternal } from "./handle-plasmo-internal" import { handleRemoteCaching } from "./handle-remote-caching" import { handleTildeSrc } from "./handle-tilde-src" import { initializeState } from "./shared" @@ -8,30 +11,13 @@ export default new Resolver({ async resolve(props) { await initializeState(props) - const remoteCacheResult = await handleRemoteCaching(props) - if (remoteCacheResult !== null) { - return remoteCacheResult - } - - const tildeSrcResult = await handleTildeSrc(props) - if (tildeSrcResult !== null) { - return tildeSrcResult - } - - try { - const segments = props.specifier.split("/") - - if (segments.length > 2) { - const filePath = require.resolve(props.specifier, { - paths: [props.dependency.resolveFrom] - }) - - return { - filePath - } - } - } catch {} - - return null + return ( + (await handlePlasmoInternal(props)) || + (await handleRemoteCaching(props)) || + (await handleTildeSrc(props)) || + (await handleAbsoluteRoot(props)) || + (await handleModuleExport(props)) || + null + ) } }) diff --git a/packages/parcel-resolver/src/shared.ts b/packages/parcel-resolver/src/shared.ts index 93b5d026c..dac8c33c3 100644 --- a/packages/parcel-resolver/src/shared.ts +++ b/packages/parcel-resolver/src/shared.ts @@ -1,5 +1,8 @@ import type { Resolver } from "@parcel/plugin" +import type { ResolveResult } from "@parcel/types" +import { statSync } from "fs-extra" import type { Got } from "got" +import { resolve } from "path" export const relevantExtensionList = [ ".ts", @@ -13,19 +16,47 @@ export const relevantExtensionSet = new Set(relevantExtensionList) type ResolveFx = ConstructorParameters[0]["resolve"] -export type ResolverResult = ReturnType +export type ResolverResult = ResolveResult export type ResolverProps = Parameters[0] export const state = { got: null as Got, - srcDir: null as string + dotPlasmoDirectory: null as string } export const initializeState = async (props: ResolverProps) => { if (state.got === null) { state.got = (await import("got")).default } + if (!state.dotPlasmoDirectory) { + state.dotPlasmoDirectory = resolve( + process.env.PLASMO_PROJECT_DIR, + ".plasmo" + ) + } +} + +/** + * Look for source code file (crawl index) + */ +export const resolveSourceIndex = async ( + absoluteBaseFile: string, + checkingExts = relevantExtensionList as readonly string[], + opts = {} as Partial +): Promise => { + const potentialFiles = checkingExts.flatMap((ext) => [ + `${absoluteBaseFile}${ext}`, + resolve(absoluteBaseFile, `index${ext}`) + ]) + + for (const file of potentialFiles) { + try { + if (statSync(file).isFile()) { + return { filePath: file, ...opts } + } + } catch {} + } - state.srcDir = process.env.PLASMO_SRC_DIR + return null } diff --git a/packages/parcel-runtime/package.json b/packages/parcel-runtime/package.json index bd58edf18..d2b80e48b 100644 --- a/packages/parcel-runtime/package.json +++ b/packages/parcel-runtime/package.json @@ -32,12 +32,12 @@ "devDependencies": { "@plasmo/config": "workspace:*", "@plasmo/utils": "workspace:*", - "@types/chrome": "0.0.197", - "tsup": "6.2.3" + "@types/chrome": "0.0.198", + "tsup": "6.3.0" }, "dependencies": { - "react-refresh": "0.14.0", "@parcel/core": "2.7.0", - "@parcel/plugin": "2.7.0" + "@parcel/plugin": "2.7.0", + "react-refresh": "0.14.0" } } diff --git a/packages/parcel-transformer-inject-env/package.json b/packages/parcel-transformer-inject-env/package.json index 3155ef6fd..0a34cccbd 100644 --- a/packages/parcel-transformer-inject-env/package.json +++ b/packages/parcel-transformer-inject-env/package.json @@ -23,7 +23,7 @@ }, "devDependencies": { "@plasmo/config": "workspace:*", - "tsup": "6.2.3" + "tsup": "6.3.0" }, "dependencies": { "@parcel/core": "2.7.0", diff --git a/packages/parcel-transformer-inline-css/package.json b/packages/parcel-transformer-inline-css/package.json index 0d152f106..9f592914d 100644 --- a/packages/parcel-transformer-inline-css/package.json +++ b/packages/parcel-transformer-inline-css/package.json @@ -23,11 +23,11 @@ }, "devDependencies": { "@plasmo/config": "workspace:*", - "tsup": "6.2.3" + "tsup": "6.3.0" }, "dependencies": { - "@parcel/css": "1.14.0", "@parcel/core": "2.7.0", + "@parcel/css": "1.14.0", "@parcel/plugin": "2.7.0", "@parcel/utils": "2.7.0" } diff --git a/packages/parcel-transformer-lab/package.json b/packages/parcel-transformer-lab/package.json index a91a2db06..c0e969d71 100644 --- a/packages/parcel-transformer-lab/package.json +++ b/packages/parcel-transformer-lab/package.json @@ -24,7 +24,7 @@ "devDependencies": { "@plasmo/config": "workspace:*", "@plasmo/utils": "workspace:*", - "tsup": "6.2.3" + "tsup": "6.3.0" }, "dependencies": { "@parcel/core": "2.7.0", diff --git a/packages/parcel-transformer-manifest/package.json b/packages/parcel-transformer-manifest/package.json index 885a7d516..ddd480ae6 100644 --- a/packages/parcel-transformer-manifest/package.json +++ b/packages/parcel-transformer-manifest/package.json @@ -25,7 +25,7 @@ "devDependencies": { "@plasmo/config": "workspace:*", "@plasmo/utils": "workspace:*", - "tsup": "6.2.3" + "tsup": "6.3.0" }, "dependencies": { "@mischnic/json-sourcemap": "0.1.0", diff --git a/packages/parcel-transformer-svelte3/package.json b/packages/parcel-transformer-svelte3/package.json index 93f2facb9..aeab180d5 100644 --- a/packages/parcel-transformer-svelte3/package.json +++ b/packages/parcel-transformer-svelte3/package.json @@ -23,8 +23,8 @@ }, "devDependencies": { "@plasmo/config": "workspace:*", - "svelte": "3.50.1", - "tsup": "6.2.3" + "svelte": "3.52.0", + "tsup": "6.3.0" }, "dependencies": { "@parcel/core": "2.7.0", diff --git a/packages/parcel-transformer-vue3/package.json b/packages/parcel-transformer-vue3/package.json index 03c63068b..2bcd79add 100644 --- a/packages/parcel-transformer-vue3/package.json +++ b/packages/parcel-transformer-vue3/package.json @@ -23,8 +23,8 @@ }, "devDependencies": { "@plasmo/config": "workspace:*", - "tsup": "6.2.3", - "vue": "3.2.40" + "tsup": "6.3.0", + "vue": "3.2.41" }, "dependencies": { "@parcel/core": "2.7.0", @@ -34,7 +34,7 @@ "@parcel/types": "2.7.0", "@parcel/utils": "2.7.0", "@plasmohq/consolidate": "0.17.0", - "@vue/compiler-sfc": "3.2.40", + "@vue/compiler-sfc": "3.2.41", "nullthrows": "1.1.1", "semver": "7.3.8" } diff --git a/packages/permission-ui b/packages/permission-ui index 72e033a1a..7e3989c97 160000 --- a/packages/permission-ui +++ b/packages/permission-ui @@ -1 +1 @@ -Subproject commit 72e033a1a1e2427fdc9832707678785121f6e9da +Subproject commit 7e3989c971d14799f97fee3a4f763a612f6e9cee diff --git a/packages/prettier-plugin-sort-imports b/packages/prettier-plugin-sort-imports index b7d84f502..1f571676a 160000 --- a/packages/prettier-plugin-sort-imports +++ b/packages/prettier-plugin-sort-imports @@ -1 +1 @@ -Subproject commit b7d84f5029d6febf2ca30b8155c09d94f6d68e5f +Subproject commit 1f571676ab6d1420180fea90e7c42c1c81342acc diff --git a/packages/puro b/packages/puro index 9b06dad2d..037ae9a1c 160000 --- a/packages/puro +++ b/packages/puro @@ -1 +1 @@ -Subproject commit 9b06dad2d0c7d1f0001ac9cf1dc44cf45da26afa +Subproject commit 037ae9a1c4b207985343cb81fb29fd4871d35e3c diff --git a/packages/rps b/packages/rps index 3a1b210e7..b9e1b6972 160000 --- a/packages/rps +++ b/packages/rps @@ -1 +1 @@ -Subproject commit 3a1b210e7dae83c5ca766ff5eb3de8af6d7d7d50 +Subproject commit b9e1b6972240ee634bfa03e523c9e7ff48377b78 diff --git a/packages/storage b/packages/storage index 96c876c18..c99764886 160000 --- a/packages/storage +++ b/packages/storage @@ -1 +1 @@ -Subproject commit 96c876c1862adea0d8c4841c4b63a10a3d1b5fa1 +Subproject commit c9976488603cce93a0bb06ca222323f9728ce51b diff --git a/packages/use-hashed-state b/packages/use-hashed-state index 73e625354..bea8e1662 160000 --- a/packages/use-hashed-state +++ b/packages/use-hashed-state @@ -1 +1 @@ -Subproject commit 73e625354d4c2f5763b42a0104ec95a1793be7f5 +Subproject commit bea8e166277b5837641e99d1d4746999c9a0ca5c diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 53b796a54..c54f1072e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,42 +13,42 @@ importers: '@types/archiver': 5.3.1 '@types/fs-extra': 9.0.13 '@types/inquirer': 9.0.2 - '@types/node': 18.8.3 + '@types/node': 18.11.0 '@types/node-rsa': 1.1.1 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 '@types/semver': 7.3.12 '@types/sharp': 0.31.0 '@types/uuid': 8.3.4 - esbuild: 0.15.10 + esbuild: 0.15.11 eslint: 8.25.0 eslint-config-prettier: 8.5.0 - eslint-plugin-react: 7.31.8 + eslint-plugin-react: 7.31.10 fs-extra: 10.1.0 prettier: 2.7.1 - tsup: 6.2.3 - turbo: 1.5.5 + tsup: 6.3.0 + turbo: 1.5.6 devDependencies: '@plasmohq/prettier-plugin-sort-imports': link:packages/prettier-plugin-sort-imports '@plasmohq/rps': link:packages/rps '@types/archiver': 5.3.1 '@types/fs-extra': 9.0.13 '@types/inquirer': 9.0.2 - '@types/node': 18.8.3 + '@types/node': 18.11.0 '@types/node-rsa': 1.1.1 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 '@types/semver': 7.3.12 '@types/sharp': 0.31.0 '@types/uuid': 8.3.4 - esbuild: 0.15.10 + esbuild: 0.15.11 eslint: 8.25.0 eslint-config-prettier: 8.5.0_eslint@8.25.0 - eslint-plugin-react: 7.31.8_eslint@8.25.0 + eslint-plugin-react: 7.31.10_eslint@8.25.0 fs-extra: 10.1.0 prettier: 2.7.1 - tsup: 6.2.3 - turbo: 1.5.5 + tsup: 6.3.0 + turbo: 1.5.6 cli/create-plasmo: specifiers: @@ -81,14 +81,14 @@ importers: '@plasmohq/parcel-config': workspace:* archiver: 5.3.1 buffer: 6.0.3 - chalk: 5.1.0 + chalk: 5.1.2 change-case: 4.1.2 dotenv: 16.0.3 dotenv-expand: 9.0.0 events: 3.3.0 fflate: 0.7.4 get-port: 6.1.2 - got: 12.5.1 + got: 12.5.2 inquirer: 9.1.3 is-path-inside: 4.0.0 mnemonic-id: 3.2.7 @@ -110,14 +110,14 @@ importers: '@plasmohq/parcel-config': link:../../packages/parcel-config archiver: 5.3.1 buffer: 6.0.3 - chalk: 5.1.0 + chalk: 5.1.2 change-case: 4.1.2 dotenv: 16.0.3 dotenv-expand: 9.0.0 events: 3.3.0 fflate: 0.7.4 get-port: 6.1.2 - got: 12.5.1 + got: 12.5.2 inquirer: 9.1.3 is-path-inside: 4.0.0 mnemonic-id: 3.2.7 @@ -138,26 +138,26 @@ importers: specifiers: '@plasmohq/prettier-plugin-sort-imports': workspace:* '@testing-library/dom': 8.19.0 - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 - antd: 4.23.4 + antd: 4.23.6 plasmo: workspace:* prettier: 2.7.1 react: 18.2.0 react-dom: 18.2.0 typescript: 4.8.4 dependencies: - antd: 4.23.4_biqbaboplfbrettd7655fr4n2y + antd: 4.23.6_biqbaboplfbrettd7655fr4n2y plasmo: link:../../cli/plasmo react: 18.2.0 react-dom: 18.2.0_react@18.2.0 devDependencies: '@plasmohq/prettier-plugin-sort-imports': link:../../packages/prettier-plugin-sort-imports '@testing-library/dom': 8.19.0 - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 prettier: 2.7.1 @@ -166,8 +166,8 @@ importers: examples/with-background: specifiers: '@plasmohq/prettier-plugin-sort-imports': workspace:* - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 bip39: 3.0.4 @@ -187,8 +187,8 @@ importers: stream-browserify: 3.0.0 devDependencies: '@plasmohq/prettier-plugin-sort-imports': link:../../packages/prettier-plugin-sort-imports - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 prettier: 2.7.1 @@ -197,8 +197,8 @@ importers: examples/with-content-script: specifiers: '@plasmohq/prettier-plugin-sort-imports': workspace:* - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 plasmo: workspace:* @@ -211,8 +211,8 @@ importers: react-dom: 18.2.0_react@18.2.0 devDependencies: '@plasmohq/prettier-plugin-sort-imports': link:../../packages/prettier-plugin-sort-imports - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 plasmo: link:../../cli/plasmo @@ -222,8 +222,8 @@ importers: examples/with-content-scripts-ui: specifiers: '@plasmohq/prettier-plugin-sort-imports': workspace:* - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 plasmo: workspace:* @@ -236,8 +236,8 @@ importers: react-dom: 18.2.0_react@18.2.0 devDependencies: '@plasmohq/prettier-plugin-sort-imports': link:../../packages/prettier-plugin-sort-imports - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 plasmo: link:../../cli/plasmo @@ -247,8 +247,8 @@ importers: examples/with-css-modules: specifiers: '@plasmohq/prettier-plugin-sort-imports': workspace:* - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 plasmo: workspace:* @@ -262,8 +262,8 @@ importers: react-dom: 18.2.0_react@18.2.0 devDependencies: '@plasmohq/prettier-plugin-sort-imports': link:../../packages/prettier-plugin-sort-imports - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 prettier: 2.7.1 @@ -272,8 +272,8 @@ importers: examples/with-devtools: specifiers: '@plasmohq/prettier-plugin-sort-imports': workspace:* - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 plasmo: workspace:* @@ -287,8 +287,8 @@ importers: react-dom: 18.2.0_react@18.2.0 devDependencies: '@plasmohq/prettier-plugin-sort-imports': link:../../packages/prettier-plugin-sort-imports - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 prettier: 2.7.1 @@ -301,8 +301,8 @@ importers: '@emotion/react': 11.10.4 '@emotion/styled': 11.10.4 '@plasmohq/prettier-plugin-sort-imports': workspace:* - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 plasmo: workspace:* @@ -320,8 +320,8 @@ importers: devDependencies: '@babel/core': 7.19.3 '@plasmohq/prettier-plugin-sort-imports': link:../../packages/prettier-plugin-sort-imports - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 prettier: 2.7.1 @@ -330,8 +330,8 @@ importers: examples/with-env: specifiers: '@plasmohq/prettier-plugin-sort-imports': workspace:* - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 plasmo: workspace:* @@ -345,8 +345,8 @@ importers: react-dom: 18.2.0_react@18.2.0 devDependencies: '@plasmohq/prettier-plugin-sort-imports': link:../../packages/prettier-plugin-sort-imports - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 prettier: 2.7.1 @@ -355,25 +355,25 @@ importers: examples/with-firebase-auth: specifiers: '@plasmohq/prettier-plugin-sort-imports': workspace:* - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 - firebase: 9.11.0 + firebase: 9.12.1 plasmo: workspace:* prettier: 2.7.1 react: 18.2.0 react-dom: 18.2.0 typescript: 4.8.4 dependencies: - firebase: 9.11.0 + firebase: 9.12.1 plasmo: link:../../cli/plasmo react: 18.2.0 react-dom: 18.2.0_react@18.2.0 devDependencies: '@plasmohq/prettier-plugin-sort-imports': link:../../packages/prettier-plugin-sort-imports - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 prettier: 2.7.1 @@ -383,11 +383,11 @@ importers: specifiers: '@plasmohq/prettier-plugin-sort-imports': workspace:* '@plasmohq/storage': workspace:* - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 - firebase: ^9.11.0 + firebase: ^9.12.1 plasmo: workspace:* prettier: 2.7.1 react: 18.2.0 @@ -395,13 +395,13 @@ importers: typescript: 4.8.4 dependencies: '@plasmohq/storage': link:../../packages/storage - firebase: 9.11.0 + firebase: 9.12.1 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 devDependencies: '@plasmohq/prettier-plugin-sort-imports': link:../../packages/prettier-plugin-sort-imports - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 plasmo: link:../../cli/plasmo @@ -411,8 +411,8 @@ importers: examples/with-google-analytics: specifiers: '@plasmohq/prettier-plugin-sort-imports': workspace:* - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 plasmo: workspace:* @@ -425,8 +425,8 @@ importers: react-dom: 18.2.0_react@18.2.0 devDependencies: '@plasmohq/prettier-plugin-sort-imports': link:../../packages/prettier-plugin-sort-imports - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 plasmo: link:../../cli/plasmo @@ -435,11 +435,11 @@ importers: examples/with-inbox-sdk: specifiers: - '@inboxsdk/core': 0.2.17 + '@inboxsdk/core': 0.2.20 '@plasmohq/prettier-plugin-sort-imports': workspace:* - '@types/chrome': 0.0.197 + '@types/chrome': 0.0.198 '@types/inboxsdk': 2.0.9 - '@types/node': 18.8.3 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 plasmo: workspace:* @@ -448,15 +448,15 @@ importers: react-dom: 18.2.0 typescript: 4.8.4 dependencies: - '@inboxsdk/core': 0.2.17 + '@inboxsdk/core': 0.2.20 plasmo: link:../../cli/plasmo react: 18.2.0 react-dom: 18.2.0_react@18.2.0 devDependencies: '@plasmohq/prettier-plugin-sort-imports': link:../../packages/prettier-plugin-sort-imports - '@types/chrome': 0.0.197 + '@types/chrome': 0.0.198 '@types/inboxsdk': 2.0.9 - '@types/node': 18.8.3 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 prettier: 2.7.1 @@ -464,16 +464,16 @@ importers: examples/with-jest: specifiers: - '@jest/globals': 29.1.2 - '@jest/types': 29.1.2 + '@jest/globals': 29.2.0 + '@jest/types': 29.2.0 '@plasmohq/prettier-plugin-sort-imports': workspace:* '@testing-library/react': 13.4.0 - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 - jest: 29.1.2 - jest-environment-jsdom: 29.1.2 + jest: 29.2.0 + jest-environment-jsdom: 29.2.0 jest-webextension-mock: 3.7.22 plasmo: workspace:* prettier: 2.7.1 @@ -486,26 +486,26 @@ importers: react: 18.2.0 react-dom: 18.2.0_react@18.2.0 devDependencies: - '@jest/globals': 29.1.2 - '@jest/types': 29.1.2 + '@jest/globals': 29.2.0 + '@jest/types': 29.2.0 '@plasmohq/prettier-plugin-sort-imports': link:../../packages/prettier-plugin-sort-imports '@testing-library/react': 13.4.0_biqbaboplfbrettd7655fr4n2y - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 - jest: 29.1.2_@types+node@18.8.3 - jest-environment-jsdom: 29.1.2 + jest: 29.2.0_@types+node@18.11.0 + jest-environment-jsdom: 29.2.0 jest-webextension-mock: 3.7.22 prettier: 2.7.1 - ts-jest: 29.0.3_tgejc6cnv2pbkgcnmxq3dkgmme + ts-jest: 29.0.3_tffzzkezgwx2pkcwct6fbmkuui typescript: 4.8.4 examples/with-jotai: specifiers: '@plasmohq/prettier-plugin-sort-imports': workspace:* - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 jotai: 1.8.5 @@ -521,8 +521,8 @@ importers: react-dom: 18.2.0_react@18.2.0 devDependencies: '@plasmohq/prettier-plugin-sort-imports': link:../../packages/prettier-plugin-sort-imports - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 prettier: 2.7.1 @@ -531,8 +531,8 @@ importers: examples/with-locales: specifiers: '@plasmohq/prettier-plugin-sort-imports': workspace:* - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 plasmo: workspace:* @@ -546,8 +546,8 @@ importers: react-dom: 18.2.0_react@18.2.0 devDependencies: '@plasmohq/prettier-plugin-sort-imports': link:../../packages/prettier-plugin-sort-imports - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 prettier: 2.7.1 @@ -556,8 +556,8 @@ importers: examples/with-main-world-content-script-injection: specifiers: '@plasmohq/prettier-plugin-sort-imports': workspace:* - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 plasmo: workspace:* @@ -571,8 +571,8 @@ importers: react-dom: 18.2.0_react@18.2.0 devDependencies: '@plasmohq/prettier-plugin-sort-imports': link:../../packages/prettier-plugin-sort-imports - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 prettier: 2.7.1 @@ -581,8 +581,8 @@ importers: examples/with-many-content-scripts: specifiers: '@plasmohq/prettier-plugin-sort-imports': workspace:* - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 plasmo: workspace:* @@ -595,8 +595,8 @@ importers: react-dom: 18.2.0_react@18.2.0 devDependencies: '@plasmohq/prettier-plugin-sort-imports': link:../../packages/prettier-plugin-sort-imports - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 plasmo: link:../../cli/plasmo @@ -607,8 +607,8 @@ importers: specifiers: '@plasmohq/prettier-plugin-sort-imports': workspace:* '@plasmohq/rps': workspace:* - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 plasmo: workspace:* @@ -623,8 +623,8 @@ importers: devDependencies: '@plasmohq/prettier-plugin-sort-imports': link:../../packages/prettier-plugin-sort-imports '@plasmohq/rps': link:../../packages/rps - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 prettier: 2.7.1 @@ -636,10 +636,10 @@ importers: '@emotion/cache': 11.10.3 '@emotion/react': 11.10.4 '@emotion/styled': 11.10.4 - '@mui/material': 5.10.8 + '@mui/material': 5.10.9 '@plasmohq/prettier-plugin-sort-imports': workspace:* - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 plasmo: workspace:* @@ -651,15 +651,15 @@ importers: '@emotion/cache': 11.10.3 '@emotion/react': 11.10.4_bjroym7kxlcs2vvwnej4p3gzwu '@emotion/styled': 11.10.4_ogudqqhlstsi7uge4lir7ff3ty - '@mui/material': 5.10.8_ikcgkdnp4bn3rgptamntbhbo7e + '@mui/material': 5.10.9_ikcgkdnp4bn3rgptamntbhbo7e plasmo: link:../../cli/plasmo react: 18.2.0 react-dom: 18.2.0_react@18.2.0 devDependencies: '@babel/core': 7.19.3 '@plasmohq/prettier-plugin-sort-imports': link:../../packages/prettier-plugin-sort-imports - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 prettier: 2.7.1 @@ -668,13 +668,13 @@ importers: examples/with-multiple-tailwindcss: specifiers: '@plasmohq/prettier-plugin-sort-imports': workspace:* - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 autoprefixer: 10.4.12 plasmo: workspace:* - postcss: 8.4.17 + postcss: 8.4.18 postcss-multiple-tailwind: 1.0.1 prettier: 2.7.1 react: 18.2.0 @@ -685,24 +685,24 @@ importers: plasmo: link:../../cli/plasmo react: 18.2.0 react-dom: 18.2.0_react@18.2.0 - tailwindcss: 3.1.8_postcss@8.4.17 + tailwindcss: 3.1.8_postcss@8.4.18 devDependencies: '@plasmohq/prettier-plugin-sort-imports': link:../../packages/prettier-plugin-sort-imports - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 - autoprefixer: 10.4.12_postcss@8.4.17 - postcss: 8.4.17 - postcss-multiple-tailwind: 1.0.1_eu2ss2h6tgtyzhkkx73xmgf5uq + autoprefixer: 10.4.12_postcss@8.4.18 + postcss: 8.4.18 + postcss-multiple-tailwind: 1.0.1_jtne6uic3zgisdnyalmn3bub4i prettier: 2.7.1 typescript: 4.8.4 examples/with-newtab: specifiers: '@plasmohq/prettier-plugin-sort-imports': workspace:* - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 plasmo: workspace:* @@ -715,8 +715,8 @@ importers: react-dom: 18.2.0_react@18.2.0 devDependencies: '@plasmohq/prettier-plugin-sort-imports': link:../../packages/prettier-plugin-sort-imports - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 plasmo: link:../../cli/plasmo @@ -727,8 +727,8 @@ importers: specifiers: '@plasmohq/prettier-plugin-sort-imports': workspace:* '@plasmohq/storage': workspace:* - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 next: 12.3.1 @@ -744,8 +744,8 @@ importers: devDependencies: '@plasmohq/prettier-plugin-sort-imports': link:../../packages/prettier-plugin-sort-imports '@plasmohq/storage': link:../../packages/storage - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 plasmo: link:../../cli/plasmo @@ -755,8 +755,8 @@ importers: examples/with-options-ui: specifiers: '@plasmohq/prettier-plugin-sort-imports': workspace:* - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 plasmo: workspace:* @@ -769,8 +769,8 @@ importers: react-dom: 18.2.0_react@18.2.0 devDependencies: '@plasmohq/prettier-plugin-sort-imports': link:../../packages/prettier-plugin-sort-imports - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 plasmo: link:../../cli/plasmo @@ -781,8 +781,8 @@ importers: specifiers: '@plasmohq/permission-ui': workspace:* '@plasmohq/prettier-plugin-sort-imports': workspace:* - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 plasmo: workspace:* @@ -796,8 +796,8 @@ importers: react-dom: 18.2.0_react@18.2.0 devDependencies: '@plasmohq/prettier-plugin-sort-imports': link:../../packages/prettier-plugin-sort-imports - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 plasmo: link:../../cli/plasmo @@ -807,8 +807,8 @@ importers: examples/with-popup: specifiers: '@plasmohq/prettier-plugin-sort-imports': workspace:* - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 plasmo: workspace:* @@ -822,8 +822,8 @@ importers: react-dom: 18.2.0_react@18.2.0 devDependencies: '@plasmohq/prettier-plugin-sort-imports': link:../../packages/prettier-plugin-sort-imports - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 prettier: 2.7.1 @@ -832,9 +832,9 @@ importers: examples/with-react-query: specifiers: '@plasmohq/prettier-plugin-sort-imports': workspace:* - '@tanstack/react-query': 4.10.3 - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@tanstack/react-query': 4.12.0 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 plasmo: workspace:* @@ -843,14 +843,14 @@ importers: react-dom: 18.2.0 typescript: 4.8.4 dependencies: - '@tanstack/react-query': 4.10.3_biqbaboplfbrettd7655fr4n2y + '@tanstack/react-query': 4.12.0_biqbaboplfbrettd7655fr4n2y plasmo: link:../../cli/plasmo react: 18.2.0 react-dom: 18.2.0_react@18.2.0 devDependencies: '@plasmohq/prettier-plugin-sort-imports': link:../../packages/prettier-plugin-sort-imports - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 prettier: 2.7.1 @@ -859,8 +859,8 @@ importers: examples/with-react-router: specifiers: '@plasmohq/prettier-plugin-sort-imports': workspace:* - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 plasmo: workspace:* @@ -876,8 +876,8 @@ importers: react-router-dom: 6.4.2_biqbaboplfbrettd7655fr4n2y devDependencies: '@plasmohq/prettier-plugin-sort-imports': link:../../packages/prettier-plugin-sort-imports - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 prettier: 2.7.1 @@ -888,10 +888,10 @@ importers: '@plasmohq/prettier-plugin-sort-imports': workspace:* '@plasmohq/redux-persist': 6.1.0 '@plasmohq/storage': workspace:* - '@reduxjs/toolkit': 1.8.5 - '@types/chrome': 0.0.197 + '@reduxjs/toolkit': 1.8.6 + '@types/chrome': 0.0.198 '@types/jest': 29.1.2 - '@types/node': 18.8.3 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 plasmo: workspace:* @@ -906,7 +906,7 @@ importers: dependencies: '@plasmohq/redux-persist': 6.1.0_redux@4.2.0 '@plasmohq/storage': link:../../packages/storage - '@reduxjs/toolkit': 1.8.5_kuo2ie247izvzll3jejufdtq3q + '@reduxjs/toolkit': 1.8.6_kuo2ie247izvzll3jejufdtq3q react: 18.2.0 react-dom: 18.2.0_react@18.2.0 react-redux: 8.0.4_yfr4m6wk75wdra335rld4tkrbu @@ -915,9 +915,9 @@ importers: redux-thunk: 2.4.1_redux@4.2.0 devDependencies: '@plasmohq/prettier-plugin-sort-imports': link:../../packages/prettier-plugin-sort-imports - '@types/chrome': 0.0.197 + '@types/chrome': 0.0.198 '@types/jest': 29.1.2 - '@types/node': 18.8.3 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 plasmo: link:../../cli/plasmo @@ -927,8 +927,8 @@ importers: examples/with-src: specifiers: '@plasmohq/prettier-plugin-sort-imports': workspace:* - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 plasmo: workspace:* @@ -941,8 +941,8 @@ importers: react-dom: 18.2.0_react@18.2.0 devDependencies: '@plasmohq/prettier-plugin-sort-imports': link:../../packages/prettier-plugin-sort-imports - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 plasmo: link:../../cli/plasmo @@ -953,8 +953,8 @@ importers: specifiers: '@plasmohq/prettier-plugin-sort-imports': workspace:* '@plasmohq/storage': workspace:* - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 plasmo: workspace:* @@ -969,8 +969,8 @@ importers: react-dom: 18.2.0_react@18.2.0 devDependencies: '@plasmohq/prettier-plugin-sort-imports': link:../../packages/prettier-plugin-sort-imports - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 prettier: 2.7.1 @@ -980,8 +980,8 @@ importers: specifiers: '@plasmohq/prettier-plugin-sort-imports': workspace:* '@plasmohq/rps': workspace:* - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 google-auth-library: 8.5.2 @@ -991,7 +991,7 @@ importers: puro: workspace:* react: 18.2.0 react-dom: 18.2.0 - stripe: 10.13.0 + stripe: 10.14.0 swr: 1.3.0 typescript: 4.8.4 dependencies: @@ -1001,13 +1001,13 @@ importers: puro: link:../../packages/puro react: 18.2.0 react-dom: 18.2.0_react@18.2.0 - stripe: 10.13.0 + stripe: 10.14.0 swr: 1.3.0_react@18.2.0 devDependencies: '@plasmohq/prettier-plugin-sort-imports': link:../../packages/prettier-plugin-sort-imports '@plasmohq/rps': link:../../packages/rps - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 prettier: 2.7.1 @@ -1016,9 +1016,9 @@ importers: examples/with-supabase: specifiers: '@plasmohq/prettier-plugin-sort-imports': workspace:* - '@supabase/supabase-js': 1.35.7 - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@supabase/supabase-js': 2.0.0 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 plasmo: workspace:* @@ -1027,13 +1027,13 @@ importers: react-dom: 18.2.0 typescript: 4.8.4 dependencies: - '@supabase/supabase-js': 1.35.7 + '@supabase/supabase-js': 2.0.0 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 devDependencies: '@plasmohq/prettier-plugin-sort-imports': link:../../packages/prettier-plugin-sort-imports - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 plasmo: link:../../cli/plasmo @@ -1043,21 +1043,21 @@ importers: examples/with-svelte: specifiers: '@plasmohq/prettier-plugin-sort-imports': workspace:* - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 plasmo: workspace:* prettier: 2.7.1 - svelte: 3.50.1 + svelte: 3.52.0 svelte-preprocess: 4.10.7 typescript: 4.8.4 dependencies: plasmo: link:../../cli/plasmo - svelte: 3.50.1 - svelte-preprocess: 4.10.7_qy6w2iv5hnh55blsjuu7uihyzm + svelte: 3.52.0 + svelte-preprocess: 4.10.7_besnmoibwkhwtentvwuriss7pa devDependencies: '@plasmohq/prettier-plugin-sort-imports': link:../../packages/prettier-plugin-sort-imports - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 prettier: 2.7.1 typescript: 4.8.4 @@ -1066,12 +1066,12 @@ importers: '@plasmohq/prettier-plugin-sort-imports': workspace:* '@tailwindcss/forms': 0.5.3 '@tailwindcss/typography': 0.5.7 - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 plasmo: workspace:* - postcss: 8.4.17 + postcss: 8.4.18 prettier: 2.7.1 react: 18.2.0 react-dom: 18.2.0 @@ -1082,42 +1082,42 @@ importers: '@tailwindcss/typography': 0.5.7_tailwindcss@3.1.8 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 - tailwindcss: 3.1.8_postcss@8.4.17 + tailwindcss: 3.1.8_postcss@8.4.18 devDependencies: '@plasmohq/prettier-plugin-sort-imports': link:../../packages/prettier-plugin-sort-imports - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 plasmo: link:../../cli/plasmo - postcss: 8.4.17 + postcss: 8.4.18 prettier: 2.7.1 typescript: 4.8.4 examples/with-vue: specifiers: '@plasmohq/prettier-plugin-sort-imports': workspace:* - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 plasmo: workspace:* prettier: 2.7.1 typescript: 4.8.4 - vue: 3.2.40 + vue: 3.2.41 dependencies: plasmo: link:../../cli/plasmo - vue: 3.2.40 + vue: 3.2.41 devDependencies: '@plasmohq/prettier-plugin-sort-imports': link:../../packages/prettier-plugin-sort-imports - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 prettier: 2.7.1 typescript: 4.8.4 examples/with-web-accessible-resources: specifiers: '@plasmohq/prettier-plugin-sort-imports': workspace:* - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 plasmo: workspace:* @@ -1131,8 +1131,8 @@ importers: react-dom: 18.2.0_react@18.2.0 devDependencies: '@plasmohq/prettier-plugin-sort-imports': link:../../packages/prettier-plugin-sort-imports - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 prettier: 2.7.1 @@ -1142,8 +1142,8 @@ importers: specifiers: '@plasmohq/prettier-plugin-sort-imports': workspace:* '@plasmohq/storage': workspace:* - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 '@types/simple-peer': 9.11.5 @@ -1168,8 +1168,8 @@ importers: simple-peer: 9.11.1 devDependencies: '@plasmohq/prettier-plugin-sort-imports': link:../../packages/prettier-plugin-sort-imports - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 '@types/simple-peer': 9.11.5 @@ -1185,8 +1185,8 @@ importers: specifiers: '@plasmohq/prettier-plugin-sort-imports': workspace:* '@plasmohq/storage': workspace:* - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 plasmo: workspace:* @@ -1201,8 +1201,8 @@ importers: react-dom: 18.2.0_react@18.2.0 devDependencies: '@plasmohq/prettier-plugin-sort-imports': link:../../packages/prettier-plugin-sort-imports - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/react-dom': 18.0.6 prettier: 2.7.1 @@ -1223,35 +1223,35 @@ importers: packages/gcp-refresh-token: specifiers: - '@jest/globals': 29.1.2 - '@jest/types': 29.1.2 + '@jest/globals': 29.2.0 + '@jest/types': 29.2.0 '@plasmohq/prettier-plugin-sort-imports': workspace:* '@plasmohq/storage': workspace:* - '@types/node': 18.8.3 + '@types/node': 18.11.0 cross-env: 7.0.3 get-port: 6.1.2 google-auth-library: 8.5.2 - jest: 29.1.2 + jest: 29.2.0 open: 8.4.0 prettier: 2.7.1 ts-jest: ^29.0.3 - tsup: 6.2.3 + tsup: 6.3.0 typescript: 4.8.4 dependencies: get-port: 6.1.2 google-auth-library: 8.5.2 open: 8.4.0 devDependencies: - '@jest/globals': 29.1.2 - '@jest/types': 29.1.2 + '@jest/globals': 29.2.0 + '@jest/types': 29.2.0 '@plasmohq/prettier-plugin-sort-imports': link:../prettier-plugin-sort-imports '@plasmohq/storage': link:../storage - '@types/node': 18.8.3 + '@types/node': 18.11.0 cross-env: 7.0.3 - jest: 29.1.2_@types+node@18.8.3 + jest: 29.2.0_@types+node@18.11.0 prettier: 2.7.1 - ts-jest: 29.0.3_tgejc6cnv2pbkgcnmxq3dkgmme - tsup: 6.2.3_typescript@4.8.4 + ts-jest: 29.0.3_tffzzkezgwx2pkcwct6fbmkuui + tsup: 6.3.0_typescript@4.8.4 typescript: 4.8.4 packages/init: @@ -1267,7 +1267,7 @@ importers: '@parcel/utils': 2.7.0 '@plasmo/config': workspace:* nullthrows: 1.1.1 - tsup: 6.2.3 + tsup: 6.3.0 dependencies: '@parcel/core': 2.7.0 '@parcel/diagnostic': 2.7.0 @@ -1278,7 +1278,7 @@ importers: devDependencies: '@parcel/types': 2.7.0_@parcel+core@2.7.0 '@plasmo/config': link:../config - tsup: 6.2.3 + tsup: 6.3.0 packages/parcel-config: specifiers: @@ -1339,7 +1339,7 @@ importers: '@parcel/types': 2.7.0 '@parcel/utils': 2.7.0 '@plasmo/config': workspace:* - tsup: 6.2.3 + tsup: 6.3.0 dependencies: '@parcel/core': 2.7.0 '@parcel/plugin': 2.7.0_@parcel+core@2.7.0 @@ -1347,7 +1347,7 @@ importers: '@parcel/utils': 2.7.0 devDependencies: '@plasmo/config': link:../config - tsup: 6.2.3 + tsup: 6.3.0 packages/parcel-packager: specifiers: @@ -1358,7 +1358,7 @@ importers: '@plasmo/config': workspace:* '@plasmo/constants': workspace:* nullthrows: 1.1.1 - tsup: 6.2.3 + tsup: 6.3.0 dependencies: '@parcel/core': 2.7.0 '@parcel/plugin': 2.7.0_@parcel+core@2.7.0 @@ -1368,24 +1368,26 @@ importers: devDependencies: '@plasmo/config': link:../config '@plasmo/constants': link:../constants - tsup: 6.2.3 + tsup: 6.3.0 packages/parcel-resolver: specifiers: '@parcel/core': 2.7.0 '@parcel/hash': 2.7.0 '@parcel/plugin': 2.7.0 + '@parcel/types': 2.7.0 '@plasmo/config': workspace:* - got: 12.5.1 - tsup: 6.2.3 + got: 12.5.2 + tsup: 6.3.0 dependencies: '@parcel/core': 2.7.0 '@parcel/hash': 2.7.0 '@parcel/plugin': 2.7.0_@parcel+core@2.7.0 - got: 12.5.1 + '@parcel/types': 2.7.0_@parcel+core@2.7.0 + got: 12.5.2 devDependencies: '@plasmo/config': link:../config - tsup: 6.2.3 + tsup: 6.3.0 packages/parcel-runtime: specifiers: @@ -1393,9 +1395,9 @@ importers: '@parcel/plugin': 2.7.0 '@plasmo/config': workspace:* '@plasmo/utils': workspace:* - '@types/chrome': 0.0.197 + '@types/chrome': 0.0.198 react-refresh: 0.14.0 - tsup: 6.2.3 + tsup: 6.3.0 dependencies: '@parcel/core': 2.7.0 '@parcel/plugin': 2.7.0_@parcel+core@2.7.0 @@ -1403,8 +1405,8 @@ importers: devDependencies: '@plasmo/config': link:../config '@plasmo/utils': link:../utils - '@types/chrome': 0.0.197 - tsup: 6.2.3 + '@types/chrome': 0.0.198 + tsup: 6.3.0 packages/parcel-transformer-inject-env: specifiers: @@ -1412,14 +1414,14 @@ importers: '@parcel/plugin': 2.7.0 '@parcel/types': 2.7.0 '@plasmo/config': workspace:* - tsup: 6.2.3 + tsup: 6.3.0 dependencies: '@parcel/core': 2.7.0 '@parcel/plugin': 2.7.0_@parcel+core@2.7.0 '@parcel/types': 2.7.0_@parcel+core@2.7.0 devDependencies: '@plasmo/config': link:../config - tsup: 6.2.3 + tsup: 6.3.0 packages/parcel-transformer-inline-css: specifiers: @@ -1428,7 +1430,7 @@ importers: '@parcel/plugin': 2.7.0 '@parcel/utils': 2.7.0 '@plasmo/config': workspace:* - tsup: 6.2.3 + tsup: 6.3.0 dependencies: '@parcel/core': 2.7.0 '@parcel/css': 1.14.0 @@ -1436,7 +1438,7 @@ importers: '@parcel/utils': 2.7.0 devDependencies: '@plasmo/config': link:../config - tsup: 6.2.3 + tsup: 6.3.0 packages/parcel-transformer-lab: specifiers: @@ -1448,7 +1450,7 @@ importers: '@parcel/utils': 2.7.0 '@plasmo/config': workspace:* '@plasmo/utils': workspace:* - tsup: 6.2.3 + tsup: 6.3.0 dependencies: '@parcel/core': 2.7.0 '@parcel/diagnostic': 2.7.0 @@ -1459,7 +1461,7 @@ importers: devDependencies: '@plasmo/config': link:../config '@plasmo/utils': link:../utils - tsup: 6.2.3 + tsup: 6.3.0 packages/parcel-transformer-manifest: specifiers: @@ -1475,7 +1477,7 @@ importers: content-security-policy-parser: 0.4.1 json-schema-to-ts: 2.5.5 nullthrows: 1.1.1 - tsup: 6.2.3 + tsup: 6.3.0 dependencies: '@mischnic/json-sourcemap': 0.1.0 '@parcel/core': 2.7.0 @@ -1490,7 +1492,7 @@ importers: devDependencies: '@plasmo/config': link:../config '@plasmo/utils': link:../utils - tsup: 6.2.3 + tsup: 6.3.0 packages/parcel-transformer-svelte3: specifiers: @@ -1500,8 +1502,8 @@ importers: '@parcel/source-map': 2.1.1 '@parcel/utils': 2.7.0 '@plasmo/config': workspace:* - svelte: 3.50.1 - tsup: 6.2.3 + svelte: 3.52.0 + tsup: 6.3.0 dependencies: '@parcel/core': 2.7.0 '@parcel/diagnostic': 2.7.0 @@ -1510,8 +1512,8 @@ importers: '@parcel/utils': 2.7.0 devDependencies: '@plasmo/config': link:../config - svelte: 3.50.1 - tsup: 6.2.3 + svelte: 3.52.0 + tsup: 6.3.0 packages/parcel-transformer-vue3: specifiers: @@ -1523,11 +1525,11 @@ importers: '@parcel/utils': 2.7.0 '@plasmo/config': workspace:* '@plasmohq/consolidate': 0.17.0 - '@vue/compiler-sfc': 3.2.40 + '@vue/compiler-sfc': 3.2.41 nullthrows: 1.1.1 semver: 7.3.8 - tsup: 6.2.3 - vue: 3.2.40 + tsup: 6.3.0 + vue: 3.2.41 dependencies: '@parcel/core': 2.7.0 '@parcel/diagnostic': 2.7.0 @@ -1536,103 +1538,103 @@ importers: '@parcel/types': 2.7.0_@parcel+core@2.7.0 '@parcel/utils': 2.7.0 '@plasmohq/consolidate': 0.17.0 - '@vue/compiler-sfc': 3.2.40 + '@vue/compiler-sfc': 3.2.41 nullthrows: 1.1.1 semver: 7.3.8 devDependencies: '@plasmo/config': link:../config - tsup: 6.2.3 - vue: 3.2.40 + tsup: 6.3.0 + vue: 3.2.41 packages/permission-ui: specifiers: - '@jest/globals': 29.1.2 - '@jest/types': 29.1.2 + '@jest/globals': 29.2.0 + '@jest/types': 29.2.0 '@plasmohq/prettier-plugin-sort-imports': workspace:* '@plasmohq/storage': workspace:* - '@types/node': 18.8.3 + '@types/node': 18.11.0 '@types/react': 18.0.21 cross-env: 7.0.3 - jest: 29.1.2 + jest: 29.2.0 prettier: 2.7.1 react: 18.2.0 ts-jest: 29.0.3 - tsup: 6.2.3 + tsup: 6.3.0 typescript: 4.8.4 devDependencies: - '@jest/globals': 29.1.2 - '@jest/types': 29.1.2 + '@jest/globals': 29.2.0 + '@jest/types': 29.2.0 '@plasmohq/prettier-plugin-sort-imports': link:../prettier-plugin-sort-imports '@plasmohq/storage': link:../storage - '@types/node': 18.8.3 + '@types/node': 18.11.0 '@types/react': 18.0.21 cross-env: 7.0.3 - jest: 29.1.2_@types+node@18.8.3 + jest: 29.2.0_@types+node@18.11.0 prettier: 2.7.1 react: 18.2.0 - ts-jest: 29.0.3_tgejc6cnv2pbkgcnmxq3dkgmme - tsup: 6.2.3_typescript@4.8.4 + ts-jest: 29.0.3_tffzzkezgwx2pkcwct6fbmkuui + tsup: 6.3.0_typescript@4.8.4 typescript: 4.8.4 packages/prettier-plugin-sort-imports: specifiers: '@babel/core': 7.19.3 - '@babel/generator': 7.19.3 - '@babel/parser': 7.19.3 - '@babel/traverse': 7.19.3 - '@babel/types': 7.19.3 + '@babel/generator': 7.19.5 + '@babel/parser': 7.19.4 + '@babel/traverse': 7.19.4 + '@babel/types': 7.19.4 '@types/lodash.clone': 4.5.7 '@types/lodash.isequal': 4.5.6 - '@types/node': 18.8.3 + '@types/node': 18.11.0 javascript-natural-sort: 0.7.1 lodash.clone: 4.5.0 lodash.isequal: 4.5.0 prettier: 2.7.1 - tsup: 6.2.3 + tsup: 6.3.0 typescript: 4.8.4 dependencies: '@babel/core': 7.19.3 - '@babel/generator': 7.19.3 - '@babel/parser': 7.19.3 - '@babel/traverse': 7.19.3 - '@babel/types': 7.19.3 + '@babel/generator': 7.19.5 + '@babel/parser': 7.19.4 + '@babel/traverse': 7.19.4 + '@babel/types': 7.19.4 javascript-natural-sort: 0.7.1 lodash.clone: 4.5.0 lodash.isequal: 4.5.0 devDependencies: '@types/lodash.clone': 4.5.7 '@types/lodash.isequal': 4.5.6 - '@types/node': 18.8.3 + '@types/node': 18.11.0 prettier: 2.7.1 - tsup: 6.2.3_typescript@4.8.4 + tsup: 6.3.0_typescript@4.8.4 typescript: 4.8.4 packages/puro: specifiers: - '@jest/globals': 29.1.2 - '@jest/types': 29.1.2 + '@jest/globals': 29.2.0 + '@jest/types': 29.2.0 '@plasmohq/prettier-plugin-sort-imports': workspace:* '@plasmohq/rps': workspace:* - '@types/node': 18.8.3 + '@types/node': 18.11.0 '@types/react': 18.0.21 - jest: 29.1.2 + jest: 29.2.0 prettier: 2.7.1 react: 18.2.0 ts-jest: 29.0.3 - tsup: 6.2.3 + tsup: 6.3.0 typescript: 4.8.4 devDependencies: - '@jest/globals': 29.1.2 - '@jest/types': 29.1.2 + '@jest/globals': 29.2.0 + '@jest/types': 29.2.0 '@plasmohq/prettier-plugin-sort-imports': link:../prettier-plugin-sort-imports '@plasmohq/rps': link:../rps - '@types/node': 18.8.3 + '@types/node': 18.11.0 '@types/react': 18.0.21 - jest: 29.1.2_@types+node@18.8.3 + jest: 29.2.0_@types+node@18.11.0 prettier: 2.7.1 react: 18.2.0 - ts-jest: 29.0.3_tgejc6cnv2pbkgcnmxq3dkgmme - tsup: 6.2.3_typescript@4.8.4 + ts-jest: 29.0.3_tffzzkezgwx2pkcwct6fbmkuui + tsup: 6.3.0_typescript@4.8.4 typescript: 4.8.4 packages/rps: @@ -1640,116 +1642,116 @@ importers: '@plasmohq/prettier-plugin-sort-imports': workspace:* '@types/cross-spawn': 6.0.2 '@types/minimatch': 5.1.2 - '@types/node': 18.8.3 + '@types/node': 18.11.0 '@types/shell-quote': 1.7.1 cross-spawn: 7.0.3 minimatch: 5.1.0 pidtree: 0.6.0 prettier: 2.7.1 read-pkg: 7.1.0 - shell-quote: 1.7.3 - tsup: 6.2.3 + shell-quote: 1.7.4 + tsup: 6.3.0 typescript: 4.8.4 dependencies: cross-spawn: 7.0.3 minimatch: 5.1.0 pidtree: 0.6.0 read-pkg: 7.1.0 - shell-quote: 1.7.3 + shell-quote: 1.7.4 devDependencies: '@plasmohq/prettier-plugin-sort-imports': link:../prettier-plugin-sort-imports '@types/cross-spawn': 6.0.2 '@types/minimatch': 5.1.2 - '@types/node': 18.8.3 + '@types/node': 18.11.0 '@types/shell-quote': 1.7.1 prettier: 2.7.1 - tsup: 6.2.3_typescript@4.8.4 + tsup: 6.3.0_typescript@4.8.4 typescript: 4.8.4 packages/storage: specifiers: - '@jest/globals': 29.1.2 - '@jest/types': 29.1.2 + '@jest/globals': 29.2.0 + '@jest/types': 29.2.0 '@plasmohq/prettier-plugin-sort-imports': workspace:* '@plasmohq/rps': workspace:* '@testing-library/react': 13.4.0 - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/webextension-polyfill': 0.9.1 cross-env: 7.0.3 - jest: 29.1.2 - jest-environment-jsdom: 29.1.2 + jest: 29.2.0 + jest-environment-jsdom: 29.2.0 prettier: 2.7.1 react: 18.2.0 react-dom: 18.2.0 rimraf: 3.0.2 ts-jest: 29.0.3 - tsup: 6.2.3 + tsup: 6.3.0 typescript: 4.8.4 webextension-polyfill: 0.10.0 dependencies: webextension-polyfill: 0.10.0 devDependencies: - '@jest/globals': 29.1.2 - '@jest/types': 29.1.2 + '@jest/globals': 29.2.0 + '@jest/types': 29.2.0 '@plasmohq/prettier-plugin-sort-imports': link:../prettier-plugin-sort-imports '@plasmohq/rps': link:../rps '@testing-library/react': 13.4.0_biqbaboplfbrettd7655fr4n2y - '@types/chrome': 0.0.197 - '@types/node': 18.8.3 + '@types/chrome': 0.0.198 + '@types/node': 18.11.0 '@types/react': 18.0.21 '@types/webextension-polyfill': 0.9.1 cross-env: 7.0.3 - jest: 29.1.2_@types+node@18.8.3 - jest-environment-jsdom: 29.1.2 + jest: 29.2.0_@types+node@18.11.0 + jest-environment-jsdom: 29.2.0 prettier: 2.7.1 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 rimraf: 3.0.2 - ts-jest: 29.0.3_tgejc6cnv2pbkgcnmxq3dkgmme - tsup: 6.2.3_typescript@4.8.4 + ts-jest: 29.0.3_tffzzkezgwx2pkcwct6fbmkuui + tsup: 6.3.0_typescript@4.8.4 typescript: 4.8.4 packages/use-hashed-state: specifiers: - '@jest/globals': 29.1.2 - '@jest/types': 29.1.2 + '@jest/globals': 29.2.0 + '@jest/types': 29.2.0 '@plasmohq/prettier-plugin-sort-imports': workspace:* '@plasmohq/storage': workspace:* '@testing-library/react': 13.4.0 - '@types/node': 18.8.3 + '@types/node': 18.11.0 '@types/react': 18.0.21 cross-env: 7.0.3 - jest: 29.1.2 - jest-environment-jsdom: 29.1.2 + jest: 29.2.0 + jest-environment-jsdom: 29.2.0 node-object-hash: 2.3.10 prettier: 2.7.1 react: 18.2.0 react-dom: 18.2.0 rimraf: 3.0.2 ts-jest: 29.0.3 - tsup: 6.2.3 + tsup: 6.3.0 typescript: 4.8.4 dependencies: node-object-hash: 2.3.10 devDependencies: - '@jest/globals': 29.1.2 - '@jest/types': 29.1.2 + '@jest/globals': 29.2.0 + '@jest/types': 29.2.0 '@plasmohq/prettier-plugin-sort-imports': link:../prettier-plugin-sort-imports '@plasmohq/storage': link:../storage '@testing-library/react': 13.4.0_biqbaboplfbrettd7655fr4n2y - '@types/node': 18.8.3 + '@types/node': 18.11.0 '@types/react': 18.0.21 cross-env: 7.0.3 - jest: 29.1.2_@types+node@18.8.3 - jest-environment-jsdom: 29.1.2 + jest: 29.2.0_@types+node@18.11.0 + jest-environment-jsdom: 29.2.0 prettier: 2.7.1 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 rimraf: 3.0.2 - ts-jest: 29.0.3_tgejc6cnv2pbkgcnmxq3dkgmme - tsup: 6.2.3_typescript@4.8.4 + ts-jest: 29.0.3_tffzzkezgwx2pkcwct6fbmkuui + tsup: 6.3.0_typescript@4.8.4 typescript: 4.8.4 packages/utils: @@ -1760,28 +1762,28 @@ importers: templates/qtt: specifiers: - '@jest/globals': 29.1.2 - '@jest/types': 29.1.2 + '@jest/globals': 29.2.0 + '@jest/types': 29.2.0 '@plasmohq/prettier-plugin-sort-imports': workspace:* '@plasmohq/rps': workspace:* - '@types/node': 18.8.3 + '@types/node': 18.11.0 cross-env: 7.0.3 - jest: 29.1.2 + jest: 29.2.0 prettier: 2.7.1 ts-jest: 29.0.3 - tsup: 6.2.3 + tsup: 6.3.0 typescript: 4.8.4 devDependencies: - '@jest/globals': 29.1.2 - '@jest/types': 29.1.2 + '@jest/globals': 29.2.0 + '@jest/types': 29.2.0 '@plasmohq/prettier-plugin-sort-imports': link:../../packages/prettier-plugin-sort-imports '@plasmohq/rps': link:../../packages/rps - '@types/node': 18.8.3 + '@types/node': 18.11.0 cross-env: 7.0.3 - jest: 29.1.2_@types+node@18.8.3 + jest: 29.2.0_@types+node@18.11.0 prettier: 2.7.1 - ts-jest: 29.0.3_tgejc6cnv2pbkgcnmxq3dkgmme - tsup: 6.2.3_typescript@4.8.4 + ts-jest: 29.0.3_tffzzkezgwx2pkcwct6fbmkuui + tsup: 6.3.0_typescript@4.8.4 typescript: 4.8.4 packages: @@ -1812,7 +1814,7 @@ packages: dependencies: '@ant-design/colors': 6.0.0 '@ant-design/icons-svg': 4.2.1 - '@babel/runtime': 7.19.0 + '@babel/runtime': 7.19.4 classnames: 2.3.2 rc-util: 5.24.4_biqbaboplfbrettd7655fr4n2y react: 18.2.0 @@ -1824,7 +1826,7 @@ packages: peerDependencies: react: '>=16.9.0' dependencies: - '@babel/runtime': 7.19.0 + '@babel/runtime': 7.19.4 classnames: 2.3.2 json2mq: 0.2.0 lodash: 4.17.21 @@ -1848,14 +1850,14 @@ packages: dependencies: '@ampproject/remapping': 2.2.0 '@babel/code-frame': 7.18.6 - '@babel/generator': 7.19.3 + '@babel/generator': 7.19.5 '@babel/helper-compilation-targets': 7.19.3_@babel+core@7.19.3 '@babel/helper-module-transforms': 7.19.0 '@babel/helpers': 7.19.0 - '@babel/parser': 7.19.3 + '@babel/parser': 7.19.4 '@babel/template': 7.18.10 - '@babel/traverse': 7.19.3 - '@babel/types': 7.19.3 + '@babel/traverse': 7.19.4 + '@babel/types': 7.19.4 convert-source-map: 1.8.0 debug: 4.3.4 gensync: 1.0.0-beta.2 @@ -1864,11 +1866,11 @@ packages: transitivePeerDependencies: - supports-color - /@babel/generator/7.19.3: - resolution: {integrity: sha512-fqVZnmp1ncvZU757UzDheKZpfPgatqY59XtW2/j/18H7u76akb8xqvjw82f+i2UKd/ksYsSick/BCLQUUtJ/qQ==} + /@babel/generator/7.19.5: + resolution: {integrity: sha512-DxbNz9Lz4aMZ99qPpO1raTbcrI1ZeYh+9NR9qhfkQIbFtVEqotHojEBxHzmxhVONkGt6VyrqVQcgpefMy9pqcg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.19.3 + '@babel/types': 7.19.4 '@jridgewell/gen-mapping': 0.3.2 jsesc: 2.5.2 @@ -1893,19 +1895,19 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.18.10 - '@babel/types': 7.19.3 + '@babel/types': 7.19.4 /@babel/helper-hoist-variables/7.18.6: resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.19.3 + '@babel/types': 7.19.4 /@babel/helper-module-imports/7.18.6: resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.19.3 + '@babel/types': 7.19.4 /@babel/helper-module-transforms/7.19.0: resolution: {integrity: sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==} @@ -1917,8 +1919,8 @@ packages: '@babel/helper-split-export-declaration': 7.18.6 '@babel/helper-validator-identifier': 7.19.1 '@babel/template': 7.18.10 - '@babel/traverse': 7.19.3 - '@babel/types': 7.19.3 + '@babel/traverse': 7.19.4 + '@babel/types': 7.19.4 transitivePeerDependencies: - supports-color @@ -1930,16 +1932,16 @@ packages: resolution: {integrity: sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.19.3 + '@babel/types': 7.19.4 /@babel/helper-split-export-declaration/7.18.6: resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.19.3 + '@babel/types': 7.19.4 - /@babel/helper-string-parser/7.18.10: - resolution: {integrity: sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==} + /@babel/helper-string-parser/7.19.4: + resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} engines: {node: '>=6.9.0'} /@babel/helper-validator-identifier/7.19.1: @@ -1955,8 +1957,8 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.18.10 - '@babel/traverse': 7.19.3 - '@babel/types': 7.19.3 + '@babel/traverse': 7.19.4 + '@babel/types': 7.19.4 transitivePeerDependencies: - supports-color @@ -1968,12 +1970,12 @@ packages: chalk: 2.4.2 js-tokens: 4.0.0 - /@babel/parser/7.19.3: - resolution: {integrity: sha512-pJ9xOlNWHiy9+FuFP09DEAFbAn4JskgRsVcc169w2xRBC3FRGuQEwjeIMMND9L2zc0iEhO/tGv4Zq+km+hxNpQ==} + /@babel/parser/7.19.4: + resolution: {integrity: sha512-qpVT7gtuOLjWeDTKLkJ6sryqLliBaFpAtGeqw5cs5giLldvh+Ch0plqnUMKoVAUS6ZEueQQiZV+p5pxtPitEsA==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.19.3 + '@babel/types': 7.19.4 /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.19.3: resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} @@ -2116,36 +2118,43 @@ packages: dependencies: regenerator-runtime: 0.13.9 + /@babel/runtime/7.19.4: + resolution: {integrity: sha512-EXpLCrk55f+cYqmHsSR+yD/0gAIMxxA9QK9lnQWzhMCvt+YmoBN7Zx94s++Kv0+unHk39vxNO8t+CMA2WSS3wA==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.13.10 + dev: false + /@babel/template/7.18.10: resolution: {integrity: sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.18.6 - '@babel/parser': 7.19.3 - '@babel/types': 7.19.3 + '@babel/parser': 7.19.4 + '@babel/types': 7.19.4 - /@babel/traverse/7.19.3: - resolution: {integrity: sha512-qh5yf6149zhq2sgIXmwjnsvmnNQC2iw70UFjp4olxucKrWd/dvlUsBI88VSLUsnMNF7/vnOiA+nk1+yLoCqROQ==} + /@babel/traverse/7.19.4: + resolution: {integrity: sha512-w3K1i+V5u2aJUOXBFFC5pveFLmtq1s3qcdDNC2qRI6WPBQIDaKFqXxDEqDO/h1dQ3HjsZoZMyIy6jGLq0xtw+g==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.18.6 - '@babel/generator': 7.19.3 + '@babel/generator': 7.19.5 '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-function-name': 7.19.0 '@babel/helper-hoist-variables': 7.18.6 '@babel/helper-split-export-declaration': 7.18.6 - '@babel/parser': 7.19.3 - '@babel/types': 7.19.3 + '@babel/parser': 7.19.4 + '@babel/types': 7.19.4 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color - /@babel/types/7.19.3: - resolution: {integrity: sha512-hGCaQzIY22DJlDh9CH7NOxgKkFjBk0Cw9xDO1Xmh2151ti7wiGfQ3LauXzL4HP1fmFlTX6XjpRETTpUcv7wQLw==} + /@babel/types/7.19.4: + resolution: {integrity: sha512-M5LK7nAeS6+9j7hAq+b3fQs+pNfUtTGq+yFFfHnauFA8zQtLRfmuipmsKDKKLuyG+wC8ABW43A153YNawNTEtw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.18.10 + '@babel/helper-string-parser': 7.19.4 '@babel/helper-validator-identifier': 7.19.1 to-fast-properties: 2.0.0 @@ -2286,8 +2295,8 @@ packages: resolution: {integrity: sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==} dev: false - /@esbuild/android-arm/0.15.10: - resolution: {integrity: sha512-FNONeQPy/ox+5NBkcSbYJxoXj9GWu8gVGJTVmUyoOCKQFDTrHVKgNSzChdNt0I8Aj/iKcsDf2r9BFwv+FSNUXg==} + /@esbuild/android-arm/0.15.11: + resolution: {integrity: sha512-PzMcQLazLBkwDEkrNPi9AbjFt6+3I7HKbiYF2XtWQ7wItrHvEOeO3T8Am434zAozWtVP7lrTue1bEfc2nYWeCA==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -2295,8 +2304,8 @@ packages: dev: true optional: true - /@esbuild/linux-loong64/0.15.10: - resolution: {integrity: sha512-w0Ou3Z83LOYEkwaui2M8VwIp+nLi/NA60lBLMvaJ+vXVMcsARYdEzLNE7RSm4+lSg4zq4d7fAVuzk7PNQ5JFgg==} + /@esbuild/linux-loong64/0.15.11: + resolution: {integrity: sha512-geWp637tUhNmhL3Xgy4Bj703yXB9dqiLJe05lCUfjSFDrQf9C/8pArusyPUbUbPwlC/EAUjBw32sxuIl/11dZw==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -2328,16 +2337,16 @@ packages: cross-spawn: 7.0.3 dev: false - /@firebase/analytics-compat/0.1.14_67sdrriteebqftxaivs76j2npy: - resolution: {integrity: sha512-HNuXTm+EYSf0T9N69UMmy9eVUipxxV8BhkCDPOdmUaa4syO4CtYk5qZt2k1qLygJI9wVFdiZeTU00FAgWK1/6A==} + /@firebase/analytics-compat/0.1.16_ccgnan4cdumznqsqrm66k6tw4a: + resolution: {integrity: sha512-mDAhE33WiyCrqSQZvzyZtQCCdf4ipn5tsEpTbIUruk7MbThQ1EbNAbPBiEk9NDLD3sUyLABZGFctvym/hc8H+w==} peerDependencies: '@firebase/app-compat': 0.x dependencies: - '@firebase/analytics': 0.8.1_@firebase+app@0.8.0 + '@firebase/analytics': 0.8.3_@firebase+app@0.8.2 '@firebase/analytics-types': 0.7.0 - '@firebase/app-compat': 0.1.35 - '@firebase/component': 0.5.18 - '@firebase/util': 1.7.0 + '@firebase/app-compat': 0.1.37 + '@firebase/component': 0.5.20 + '@firebase/util': 1.7.2 tslib: 2.4.0 transitivePeerDependencies: - '@firebase/app' @@ -2347,30 +2356,30 @@ packages: resolution: {integrity: sha512-DNE2Waiwy5+zZnCfintkDtBfaW6MjIG883474v6Z0K1XZIvl76cLND4iv0YUb48leyF+PJK1KO2XrgHb/KpmhQ==} dev: false - /@firebase/analytics/0.8.1_@firebase+app@0.8.0: - resolution: {integrity: sha512-br/PBwPAuVdmuxt6k9S6Wtyvgh5YC4vPsY4zv/AtzrgIiXhlJKi28If9Pfh0z9W0dLuqTLSVI0MNzUV/hH5oTA==} + /@firebase/analytics/0.8.3_@firebase+app@0.8.2: + resolution: {integrity: sha512-viGhc57JW9zHp/0JKpLBUthdpOrEjbPETQFz8oNfaNma+cHA6FtIrtg4Sla52DgqatbATcE9aIDBiPCGrCtNjw==} peerDependencies: '@firebase/app': 0.x dependencies: - '@firebase/app': 0.8.0 - '@firebase/component': 0.5.18 - '@firebase/installations': 0.5.13_@firebase+app@0.8.0 + '@firebase/app': 0.8.2 + '@firebase/component': 0.5.20 + '@firebase/installations': 0.5.15_@firebase+app@0.8.2 '@firebase/logger': 0.3.3 - '@firebase/util': 1.7.0 + '@firebase/util': 1.7.2 tslib: 2.4.0 dev: false - /@firebase/app-check-compat/0.2.13_67sdrriteebqftxaivs76j2npy: - resolution: {integrity: sha512-vVj6hcdwAOyR4GWrASyki9HhC8mIDN4hta7k/WC0k4UeWCjthfSgR+8Ce7HHp8h4fB5LhVFgFC8QI07sZ2O7jA==} + /@firebase/app-check-compat/0.2.15_ccgnan4cdumznqsqrm66k6tw4a: + resolution: {integrity: sha512-EgD1WEFwwq7aP7DxPSYuUpMt8eAhClA57976D3BaHDbH/IXEuw0DfaeT0LtBb+xJD7J8uxy+YKpudCC8gzUu8g==} peerDependencies: '@firebase/app-compat': 0.x dependencies: - '@firebase/app-check': 0.5.13_@firebase+app@0.8.0 + '@firebase/app-check': 0.5.15_@firebase+app@0.8.2 '@firebase/app-check-types': 0.4.0 - '@firebase/app-compat': 0.1.35 - '@firebase/component': 0.5.18 + '@firebase/app-compat': 0.1.37 + '@firebase/component': 0.5.20 '@firebase/logger': 0.3.3 - '@firebase/util': 1.7.0 + '@firebase/util': 1.7.2 tslib: 2.4.0 transitivePeerDependencies: - '@firebase/app' @@ -2384,25 +2393,25 @@ packages: resolution: {integrity: sha512-SsWafqMABIOu7zLgWbmwvHGOeQQVQlwm42kwwubsmfLmL4Sf5uGpBfDhQ0CAkpi7bkJ/NwNFKafNDL9prRNP0Q==} dev: false - /@firebase/app-check/0.5.13_@firebase+app@0.8.0: - resolution: {integrity: sha512-+1E2aDvd7vo4QidEyQFZaHur4r8oaHXZZ/SqykK2bcHBF3ihimJgrGBbtvOdUzrR0MOCZx9a18nXAJqevi/+Ow==} + /@firebase/app-check/0.5.15_@firebase+app@0.8.2: + resolution: {integrity: sha512-ifQalGXkXMwGR3F8Glmo1XtDg0UjkwCmI/ff05mxnKGMfs5ZDyw8DikQfna//a/KdYuOBqxlBwS2BhHiobqUUg==} peerDependencies: '@firebase/app': 0.x dependencies: - '@firebase/app': 0.8.0 - '@firebase/component': 0.5.18 + '@firebase/app': 0.8.2 + '@firebase/component': 0.5.20 '@firebase/logger': 0.3.3 - '@firebase/util': 1.7.0 + '@firebase/util': 1.7.2 tslib: 2.4.0 dev: false - /@firebase/app-compat/0.1.35: - resolution: {integrity: sha512-6ax9yXCPEBSREHxo+nCpSgSg01mGTvR4I7u/EHqVNNqG8uEWog7sUan3Y3vr3q3zH8t5BkXDGejOH9atF+XnAQ==} + /@firebase/app-compat/0.1.37: + resolution: {integrity: sha512-doTKYGlVc8ZiQNOl66rpkU/YItRyOxCgMp4YWThXkPM4T/pTi4a9IMCe8K88gVNeYWd8sKW4vSnxjcOG5hQXEA==} dependencies: - '@firebase/app': 0.8.0 - '@firebase/component': 0.5.18 + '@firebase/app': 0.8.2 + '@firebase/component': 0.5.20 '@firebase/logger': 0.3.3 - '@firebase/util': 1.7.0 + '@firebase/util': 1.7.2 tslib: 2.4.0 dev: false @@ -2410,26 +2419,26 @@ packages: resolution: {integrity: sha512-Lec3VVquUwXPn2UReGSsfTxuMBVRmzGIwA/CJnF0LQuPgv9kOmXk9mVqsDMfHxHtqjai0n6wWHR2TqjdVV/bYA==} dev: false - /@firebase/app/0.8.0: - resolution: {integrity: sha512-9kZjhIDv4u4PlrCgcQVBA2u8BZHrP8rUWDltmCUi9BLHv0tltfxLMZODV5LeuAfCJKVp2dbIrpGHPxAaLLl/ww==} + /@firebase/app/0.8.2: + resolution: {integrity: sha512-ByNDCe8h9O/szO3XVTrS484MtqBOKriVaNCQC7Y7KgZSaiA0OOWmIY5vwi63mBTYetqMNN5VGiG/6ZSmGIZyoQ==} dependencies: - '@firebase/component': 0.5.18 + '@firebase/component': 0.5.20 '@firebase/logger': 0.3.3 - '@firebase/util': 1.7.0 + '@firebase/util': 1.7.2 idb: 7.0.1 tslib: 2.4.0 dev: false - /@firebase/auth-compat/0.2.21_beyrw73ss46ah3z6mhsogcbbku: - resolution: {integrity: sha512-etu40X/AdVWys/RvTZ0lHCmglGT3vEos+LS3O5u+L7vLOJ0LsiV8i9bFBPCv9aZcqK/R7cs9bGLQdZB9QwimVQ==} + /@firebase/auth-compat/0.2.23_i2ahgvjm4wg2xeccojmmxawjhq: + resolution: {integrity: sha512-r9YEXaL7YKoFOWHRvVoQ6d5klP+hkSsAtt21UIvP3/BxDDU+yLXN5vVvFHr38apuUeMGN34M7zkY6SihnLutIQ==} peerDependencies: '@firebase/app-compat': 0.x dependencies: - '@firebase/app-compat': 0.1.35 - '@firebase/auth': 0.20.8_@firebase+app@0.8.0 - '@firebase/auth-types': 0.11.0_hc4yn5f4ebzhrwwrb4uuunvgqi - '@firebase/component': 0.5.18 - '@firebase/util': 1.7.0 + '@firebase/app-compat': 0.1.37 + '@firebase/auth': 0.20.10_@firebase+app@0.8.2 + '@firebase/auth-types': 0.11.0_lmwpdx2fmxhc4czm5d7dj3yohq + '@firebase/component': 0.5.20 + '@firebase/util': 1.7.2 node-fetch: 2.6.7 selenium-webdriver: 4.1.2 tslib: 2.4.0 @@ -2441,35 +2450,35 @@ packages: - utf-8-validate dev: false - /@firebase/auth-interop-types/0.1.6_hc4yn5f4ebzhrwwrb4uuunvgqi: + /@firebase/auth-interop-types/0.1.6_lmwpdx2fmxhc4czm5d7dj3yohq: resolution: {integrity: sha512-etIi92fW3CctsmR9e3sYM3Uqnoq861M0Id9mdOPF6PWIg38BXL5k4upCNBggGUpLIS0H1grMOvy/wn1xymwe2g==} peerDependencies: '@firebase/app-types': 0.x '@firebase/util': 1.x dependencies: '@firebase/app-types': 0.8.0 - '@firebase/util': 1.7.0 + '@firebase/util': 1.7.2 dev: false - /@firebase/auth-types/0.11.0_hc4yn5f4ebzhrwwrb4uuunvgqi: + /@firebase/auth-types/0.11.0_lmwpdx2fmxhc4czm5d7dj3yohq: resolution: {integrity: sha512-q7Bt6cx+ySj9elQHTsKulwk3+qDezhzRBFC9zlQ1BjgMueUOnGMcvqmU0zuKlQ4RhLSH7MNAdBV2znVaoN3Vxw==} peerDependencies: '@firebase/app-types': 0.x '@firebase/util': 1.x dependencies: '@firebase/app-types': 0.8.0 - '@firebase/util': 1.7.0 + '@firebase/util': 1.7.2 dev: false - /@firebase/auth/0.20.8_@firebase+app@0.8.0: - resolution: {integrity: sha512-ss0Uyp5sLrGRR/8bbkZTod5gmdgltqvcxQySAKYGbsyBq4j+RTjZzVqUHZHFY7f8NLm2Bz4hO1dZRaIUYW8zLw==} + /@firebase/auth/0.20.10_@firebase+app@0.8.2: + resolution: {integrity: sha512-uAZypmVv/4nijaPVtR/ipjKBmSDPLQ7sNScLHs2DVhdvCklgUUF5+zsEdPlMfKDIfmVQHFwHbUgeKyXDYSRMwQ==} peerDependencies: '@firebase/app': 0.x dependencies: - '@firebase/app': 0.8.0 - '@firebase/component': 0.5.18 + '@firebase/app': 0.8.2 + '@firebase/component': 0.5.20 '@firebase/logger': 0.3.3 - '@firebase/util': 1.7.0 + '@firebase/util': 1.7.2 node-fetch: 2.6.7 selenium-webdriver: 4.1.2 tslib: 2.4.0 @@ -2479,56 +2488,56 @@ packages: - utf-8-validate dev: false - /@firebase/component/0.5.18: - resolution: {integrity: sha512-worbz6idNWud/Sfpp3Lf9BE9tM8GRHhuQ4Hsqnva6ECdSRKYt8RRPg3UUSwDGa4iFpPo+gF/jKfydYN676+JmQ==} + /@firebase/component/0.5.20: + resolution: {integrity: sha512-wP51tQBlPFprfAWxWjzC/56hG4APhl43jFsgwuqCl3bhVbiKcr278QbrbGNmIXDeGKo4sGZLAnH9whl2apeCmA==} dependencies: - '@firebase/util': 1.7.0 + '@firebase/util': 1.7.2 tslib: 2.4.0 dev: false - /@firebase/database-compat/0.2.7_@firebase+app-types@0.8.0: - resolution: {integrity: sha512-D9nTb8RNb3RbsKtwUFDykIeUbuBgVSDKE+b6dCgVi9PS7sNATdZPpKGjxLIAxCggyRTgfMj5pr0S5fhrMedRNw==} + /@firebase/database-compat/0.2.9_@firebase+app-types@0.8.0: + resolution: {integrity: sha512-zzyFM3+jW/qYtHojiQirHXGXYyElbqVngEEn/i2gXoSzcK0Y2AL5oHAqGYXLaaW0+t4Zwnssh3HnQJM8C1D0fw==} dependencies: - '@firebase/component': 0.5.18 - '@firebase/database': 0.13.7_@firebase+app-types@0.8.0 - '@firebase/database-types': 0.9.14 + '@firebase/component': 0.5.20 + '@firebase/database': 0.13.9_@firebase+app-types@0.8.0 + '@firebase/database-types': 0.9.16 '@firebase/logger': 0.3.3 - '@firebase/util': 1.7.0 + '@firebase/util': 1.7.2 tslib: 2.4.0 transitivePeerDependencies: - '@firebase/app-types' dev: false - /@firebase/database-types/0.9.14: - resolution: {integrity: sha512-utMsusFMr5HuyiKxFyeOXU4hvC7hdJFTiyUWTQpLFODRwhtoPE539Y1I3r/LJhSPyt8dtds2GSjnvIbCvDezLQ==} + /@firebase/database-types/0.9.16: + resolution: {integrity: sha512-dK/uFgHisrVijSoHf9RLJ7NwvlOul2rO/z9ufOSbGd8/TqFVASXz+19mynhDIoSEnyQtJC/NTyBzSPfjz0w61w==} dependencies: '@firebase/app-types': 0.8.0 - '@firebase/util': 1.7.0 + '@firebase/util': 1.7.2 dev: false - /@firebase/database/0.13.7_@firebase+app-types@0.8.0: - resolution: {integrity: sha512-j72yRxwGMcRnB+KwmyQYpPJHb5oNgbTS17ecAm8cX1GEyRohbZiE9GljbMaoOxSz/r8XuVfe748gEk5HFSEtSA==} + /@firebase/database/0.13.9_@firebase+app-types@0.8.0: + resolution: {integrity: sha512-raQEBgQQybaEoMloJL8wWHQywGQ9mF2VbitvHydsbSNn+KL/xRDjXeQZPuuSbRjkYV6mR8jvQB7gpnzQQNE8Qg==} dependencies: - '@firebase/auth-interop-types': 0.1.6_hc4yn5f4ebzhrwwrb4uuunvgqi - '@firebase/component': 0.5.18 + '@firebase/auth-interop-types': 0.1.6_lmwpdx2fmxhc4czm5d7dj3yohq + '@firebase/component': 0.5.20 '@firebase/logger': 0.3.3 - '@firebase/util': 1.7.0 + '@firebase/util': 1.7.2 faye-websocket: 0.11.4 tslib: 2.4.0 transitivePeerDependencies: - '@firebase/app-types' dev: false - /@firebase/firestore-compat/0.1.26_beyrw73ss46ah3z6mhsogcbbku: - resolution: {integrity: sha512-e0cIToek3tmbzd1UK7fFii6Fo+s2QoJt4Q9ZKxP6cBaMowZoWxZs8/cE7TPsnpgrx5BNc1DjLdpUh0vAuk+q4Q==} + /@firebase/firestore-compat/0.2.1_i2ahgvjm4wg2xeccojmmxawjhq: + resolution: {integrity: sha512-XiiTpmUfyZ6QU3Dw9BCT4T+KPvqzada1GsUNX49HmriWHpIn3jTAjsagkigRAnmNDlxS3ki6Yzg9Cs60tpD0tw==} peerDependencies: '@firebase/app-compat': 0.x dependencies: - '@firebase/app-compat': 0.1.35 - '@firebase/component': 0.5.18 - '@firebase/firestore': 3.6.0_@firebase+app@0.8.0 - '@firebase/firestore-types': 2.5.0_hc4yn5f4ebzhrwwrb4uuunvgqi - '@firebase/util': 1.7.0 + '@firebase/app-compat': 0.1.37 + '@firebase/component': 0.5.20 + '@firebase/firestore': 3.7.1_@firebase+app@0.8.2 + '@firebase/firestore-types': 2.5.0_lmwpdx2fmxhc4czm5d7dj3yohq + '@firebase/util': 1.7.2 tslib: 2.4.0 transitivePeerDependencies: - '@firebase/app' @@ -2536,28 +2545,28 @@ packages: - encoding dev: false - /@firebase/firestore-types/2.5.0_hc4yn5f4ebzhrwwrb4uuunvgqi: + /@firebase/firestore-types/2.5.0_lmwpdx2fmxhc4czm5d7dj3yohq: resolution: {integrity: sha512-I6c2m1zUhZ5SH0cWPmINabDyH5w0PPFHk2UHsjBpKdZllzJZ2TwTkXbDtpHUZNmnc/zAa0WNMNMvcvbb/xJLKA==} peerDependencies: '@firebase/app-types': 0.x '@firebase/util': 1.x dependencies: '@firebase/app-types': 0.8.0 - '@firebase/util': 1.7.0 + '@firebase/util': 1.7.2 dev: false - /@firebase/firestore/3.6.0_@firebase+app@0.8.0: - resolution: {integrity: sha512-vGeC2nXx/Ca+HsFhBLzz3jX1v571AZtNGf7AX0lMXeL+t0awWsAdq0ahkNRMjejhK5zVa68H/zg2RCO7fg8JiA==} + /@firebase/firestore/3.7.1_@firebase+app@0.8.2: + resolution: {integrity: sha512-sDZ79cUf4cwCyRzN74zODgaeUvyt0lGA8YwaasVVqojgznwMG/bIz+/Tny4ZEnLZFrlniCqt2tStWsiC6s3u7g==} engines: {node: '>=10.10.0'} peerDependencies: '@firebase/app': 0.x dependencies: - '@firebase/app': 0.8.0 - '@firebase/component': 0.5.18 + '@firebase/app': 0.8.2 + '@firebase/component': 0.5.20 '@firebase/logger': 0.3.3 - '@firebase/util': 1.7.0 - '@firebase/webchannel-wrapper': 0.7.0 - '@grpc/grpc-js': 1.7.1 + '@firebase/util': 1.7.2 + '@firebase/webchannel-wrapper': 0.8.0 + '@grpc/grpc-js': 1.7.2 '@grpc/proto-loader': 0.6.13 node-fetch: 2.6.7 tslib: 2.4.0 @@ -2565,16 +2574,16 @@ packages: - encoding dev: false - /@firebase/functions-compat/0.2.5_beyrw73ss46ah3z6mhsogcbbku: - resolution: {integrity: sha512-r9lUxkBNmfulLfujdO7W2AAyH1I3QQBvrRlNoub8TNU+2UbqAfFde7yV0DhOCGhr75zp4ZVv71Zw6wIgwC0G1Q==} + /@firebase/functions-compat/0.2.7_i2ahgvjm4wg2xeccojmmxawjhq: + resolution: {integrity: sha512-bcUst8ZDJHeVy2Wox4KEM5EizsrrqLzbwFIwJD7KkuSYP8XrlV2gaqJnCvIXXc0Nc4JRGvbXcvFFMXDjhsEp4Q==} peerDependencies: '@firebase/app-compat': 0.x dependencies: - '@firebase/app-compat': 0.1.35 - '@firebase/component': 0.5.18 - '@firebase/functions': 0.8.5_unghsxa6g7m74ehr6clzqt6wey + '@firebase/app-compat': 0.1.37 + '@firebase/component': 0.5.20 + '@firebase/functions': 0.8.7_xtqa4wflugpy4cokvoiqqfajxe '@firebase/functions-types': 0.5.0 - '@firebase/util': 1.7.0 + '@firebase/util': 1.7.2 tslib: 2.4.0 transitivePeerDependencies: - '@firebase/app' @@ -2586,17 +2595,17 @@ packages: resolution: {integrity: sha512-qza0M5EwX+Ocrl1cYI14zoipUX4gI/Shwqv0C1nB864INAD42Dgv4v94BCyxGHBg2kzlWy8PNafdP7zPO8aJQA==} dev: false - /@firebase/functions/0.8.5_unghsxa6g7m74ehr6clzqt6wey: - resolution: {integrity: sha512-oI4ipogH6x+2euHGs+l+cZmRwg8psYxblbO5YebB7nh+x2UcFE4+4uDUXQc7XQrT4b1uDbrW343BU46RKFtwWg==} + /@firebase/functions/0.8.7_xtqa4wflugpy4cokvoiqqfajxe: + resolution: {integrity: sha512-JHSKdAOzlFJ9NdKoOaq4x6S1q6B3GmYZDg13KIDsE6BC0E9o/eWxOWOjSFJRCP/lpfFwa0rYBRayfUvZxW3BLw==} peerDependencies: '@firebase/app': 0.x dependencies: - '@firebase/app': 0.8.0 + '@firebase/app': 0.8.2 '@firebase/app-check-interop-types': 0.1.0 - '@firebase/auth-interop-types': 0.1.6_hc4yn5f4ebzhrwwrb4uuunvgqi - '@firebase/component': 0.5.18 + '@firebase/auth-interop-types': 0.1.6_lmwpdx2fmxhc4czm5d7dj3yohq + '@firebase/component': 0.5.20 '@firebase/messaging-interop-types': 0.1.0 - '@firebase/util': 1.7.0 + '@firebase/util': 1.7.2 node-fetch: 2.6.7 tslib: 2.4.0 transitivePeerDependencies: @@ -2604,16 +2613,16 @@ packages: - encoding dev: false - /@firebase/installations-compat/0.1.13_beyrw73ss46ah3z6mhsogcbbku: - resolution: {integrity: sha512-JDdne03YV4VfIyGkmlg8ltSHS0hOzQXLkn2gDzvKsyvke0EAUI9HLHUDQAOKVpyn7LsDwFTub5QcrR0owG8b+Q==} + /@firebase/installations-compat/0.1.15_i2ahgvjm4wg2xeccojmmxawjhq: + resolution: {integrity: sha512-m0atyudsVj6ekmM+djhhzzInMC3Y233YJky9vXUVt5MHQY0mHhqDds9+UIrCa6cpbl+ntI2fOuoYV7y01s3sfw==} peerDependencies: '@firebase/app-compat': 0.x dependencies: - '@firebase/app-compat': 0.1.35 - '@firebase/component': 0.5.18 - '@firebase/installations': 0.5.13_@firebase+app@0.8.0 + '@firebase/app-compat': 0.1.37 + '@firebase/component': 0.5.20 + '@firebase/installations': 0.5.15_@firebase+app@0.8.2 '@firebase/installations-types': 0.4.0_@firebase+app-types@0.8.0 - '@firebase/util': 1.7.0 + '@firebase/util': 1.7.2 tslib: 2.4.0 transitivePeerDependencies: - '@firebase/app' @@ -2628,14 +2637,14 @@ packages: '@firebase/app-types': 0.8.0 dev: false - /@firebase/installations/0.5.13_@firebase+app@0.8.0: - resolution: {integrity: sha512-T3+RIeqMA1vpnSOK/1wckpSSk3zbLNQgDWoiymwvK/FxjPFHO/LY1W0guqTmiYgK0stdLIHXh7syli5HboO47g==} + /@firebase/installations/0.5.15_@firebase+app@0.8.2: + resolution: {integrity: sha512-RVm2nc2d+bEDFzFzQDTTU1Z13fjAD0v88yDLjtRZuT2R7JwvAegQ4F7CupBvnnf7nftkd3kBwdOi8MhMthb3jQ==} peerDependencies: '@firebase/app': 0.x dependencies: - '@firebase/app': 0.8.0 - '@firebase/component': 0.5.18 - '@firebase/util': 1.7.0 + '@firebase/app': 0.8.2 + '@firebase/component': 0.5.20 + '@firebase/util': 1.7.2 idb: 7.0.1 tslib: 2.4.0 dev: false @@ -2646,15 +2655,15 @@ packages: tslib: 2.4.0 dev: false - /@firebase/messaging-compat/0.1.17_67sdrriteebqftxaivs76j2npy: - resolution: {integrity: sha512-WRaWizUMurqDQkCHzkW2XJkJl6BqSLhrCoCcClyIdC4XEolAgIo9X4Jy2Jd7HiX6SUSPgwEv0u93MnuIS9JWGw==} + /@firebase/messaging-compat/0.1.19_ccgnan4cdumznqsqrm66k6tw4a: + resolution: {integrity: sha512-h5tx4nxfSILeRquk5mKE8Onu7WtL6b7rfB6GKNJKecvkPs3nnq5Z4cp2Av4JUR2Wtt9UxCTfO0iRbbmtrt2bZQ==} peerDependencies: '@firebase/app-compat': 0.x dependencies: - '@firebase/app-compat': 0.1.35 - '@firebase/component': 0.5.18 - '@firebase/messaging': 0.9.17_@firebase+app@0.8.0 - '@firebase/util': 1.7.0 + '@firebase/app-compat': 0.1.37 + '@firebase/component': 0.5.20 + '@firebase/messaging': 0.9.19_@firebase+app@0.8.2 + '@firebase/util': 1.7.2 tslib: 2.4.0 transitivePeerDependencies: - '@firebase/app' @@ -2664,31 +2673,31 @@ packages: resolution: {integrity: sha512-DbvUl/rXAZpQeKBnwz0NYY5OCqr2nFA0Bj28Fmr3NXGqR4PAkfTOHuQlVtLO1Nudo3q0HxAYLa68ZDAcuv2uKQ==} dev: false - /@firebase/messaging/0.9.17_@firebase+app@0.8.0: - resolution: {integrity: sha512-oyjPT1lutJqiivl3UxkJeLrNbOkakFKMUYYviEPEL1PAU+yfKWp7IbRaZPZy4Av+i0sSdLDyB8H803B6tZ+C0Q==} + /@firebase/messaging/0.9.19_@firebase+app@0.8.2: + resolution: {integrity: sha512-xu99y/7/P+y3txGtgjsVJZyvx7T5/KdvFgDWS7oZwhKYG0o+DXFvvw3SBMK82LFGFOoyHlJUPqv45EyCPnOPCA==} peerDependencies: '@firebase/app': 0.x dependencies: - '@firebase/app': 0.8.0 - '@firebase/component': 0.5.18 - '@firebase/installations': 0.5.13_@firebase+app@0.8.0 + '@firebase/app': 0.8.2 + '@firebase/component': 0.5.20 + '@firebase/installations': 0.5.15_@firebase+app@0.8.2 '@firebase/messaging-interop-types': 0.1.0 - '@firebase/util': 1.7.0 + '@firebase/util': 1.7.2 idb: 7.0.1 tslib: 2.4.0 dev: false - /@firebase/performance-compat/0.1.13_67sdrriteebqftxaivs76j2npy: - resolution: {integrity: sha512-Den0APOV7bqnQxLuAhzo4dIkojbKR30/Q+8qeDrbdMHZL50wkZm09/OGqXoViCTy8zHDaau+Wp78z0qMqwUFxg==} + /@firebase/performance-compat/0.1.15_ccgnan4cdumznqsqrm66k6tw4a: + resolution: {integrity: sha512-mryHr5eBEpWxBo8b3KM/53SwwVjMVahwdEnhfx1r+zAvmEPEzXUOGBzAC1l5WQ4DrwtDR87uMZ5soiQ/0jl9QQ==} peerDependencies: '@firebase/app-compat': 0.x dependencies: - '@firebase/app-compat': 0.1.35 - '@firebase/component': 0.5.18 + '@firebase/app-compat': 0.1.37 + '@firebase/component': 0.5.20 '@firebase/logger': 0.3.3 - '@firebase/performance': 0.5.13_@firebase+app@0.8.0 + '@firebase/performance': 0.5.15_@firebase+app@0.8.2 '@firebase/performance-types': 0.1.0 - '@firebase/util': 1.7.0 + '@firebase/util': 1.7.2 tslib: 2.4.0 transitivePeerDependencies: - '@firebase/app' @@ -2698,30 +2707,30 @@ packages: resolution: {integrity: sha512-6p1HxrH0mpx+622Ql6fcxFxfkYSBpE3LSuwM7iTtYU2nw91Hj6THC8Bc8z4nboIq7WvgsT/kOTYVVZzCSlXl8w==} dev: false - /@firebase/performance/0.5.13_@firebase+app@0.8.0: - resolution: {integrity: sha512-k35iR9LcRUsuyEa4sXzBaVKMaFGgDgI3fjHtcmfjspeSywTigbCWxGoN551uk+udAkC0ENnODGm6t/T/ie4HaQ==} + /@firebase/performance/0.5.15_@firebase+app@0.8.2: + resolution: {integrity: sha512-YnnkUehXXzqQefNE5PlPEsXeJYSeY7cMWEdHYTj6u0/F5ntLSAhVZC8jl3Y0fTU1W8a9USQhml6NaXyWiVGmjQ==} peerDependencies: '@firebase/app': 0.x dependencies: - '@firebase/app': 0.8.0 - '@firebase/component': 0.5.18 - '@firebase/installations': 0.5.13_@firebase+app@0.8.0 + '@firebase/app': 0.8.2 + '@firebase/component': 0.5.20 + '@firebase/installations': 0.5.15_@firebase+app@0.8.2 '@firebase/logger': 0.3.3 - '@firebase/util': 1.7.0 + '@firebase/util': 1.7.2 tslib: 2.4.0 dev: false - /@firebase/remote-config-compat/0.1.13_67sdrriteebqftxaivs76j2npy: - resolution: {integrity: sha512-7bvcMosoS9fTXV305Cx62cyDFFk/CkToIrOR3tTKYr5cG/OKhrk0S/z9Wk6rowhgKHkg2SSZr5Difrj3vQPXDQ==} + /@firebase/remote-config-compat/0.1.15_ccgnan4cdumznqsqrm66k6tw4a: + resolution: {integrity: sha512-jGUrZXIxQRMeSrqEaCi3MtMF33NN12TNTQDZlbex2+T2+yTMI/sn3Mq52T/OccCo86DK17WVlXSWQCH1zCD13g==} peerDependencies: '@firebase/app-compat': 0.x dependencies: - '@firebase/app-compat': 0.1.35 - '@firebase/component': 0.5.18 + '@firebase/app-compat': 0.1.37 + '@firebase/component': 0.5.20 '@firebase/logger': 0.3.3 - '@firebase/remote-config': 0.3.12_@firebase+app@0.8.0 + '@firebase/remote-config': 0.3.14_@firebase+app@0.8.2 '@firebase/remote-config-types': 0.2.0 - '@firebase/util': 1.7.0 + '@firebase/util': 1.7.2 tslib: 2.4.0 transitivePeerDependencies: - '@firebase/app' @@ -2731,29 +2740,29 @@ packages: resolution: {integrity: sha512-hqK5sCPeZvcHQ1D6VjJZdW6EexLTXNMJfPdTwbD8NrXUw6UjWC4KWhLK/TSlL0QPsQtcKRkaaoP+9QCgKfMFPw==} dev: false - /@firebase/remote-config/0.3.12_@firebase+app@0.8.0: - resolution: {integrity: sha512-Vhsr6H/onMOiNnEcEBfcv1qadtMtaIwI2oDAP4bbqmCp84XtbizUqY0Y0psOAjKArAbkoqc/33cngRl093YOIQ==} + /@firebase/remote-config/0.3.14_@firebase+app@0.8.2: + resolution: {integrity: sha512-wEOz3Tasxhr5lCGioe0WNZwDOoQhNZK2qGAm5+AlHAPaAhWIWvqUTkKsk3nFRztyRZzj3r9k5Gc2OSpEcQKP1A==} peerDependencies: '@firebase/app': 0.x dependencies: - '@firebase/app': 0.8.0 - '@firebase/component': 0.5.18 - '@firebase/installations': 0.5.13_@firebase+app@0.8.0 + '@firebase/app': 0.8.2 + '@firebase/component': 0.5.20 + '@firebase/installations': 0.5.15_@firebase+app@0.8.2 '@firebase/logger': 0.3.3 - '@firebase/util': 1.7.0 + '@firebase/util': 1.7.2 tslib: 2.4.0 dev: false - /@firebase/storage-compat/0.1.18_beyrw73ss46ah3z6mhsogcbbku: - resolution: {integrity: sha512-ULHyM0vXX/vM/tZhYJQbkk5mnv/eQPTs9KAnIdJh7o7Hj6cvNg0Hq8x9Y/QtqLZBfnm9ATszvD41mqLD4LzrGQ==} + /@firebase/storage-compat/0.1.20_i2ahgvjm4wg2xeccojmmxawjhq: + resolution: {integrity: sha512-8vruwltKdvEPhYbPXA/otb5fAD7MGsBHpCzktJWvF7eIALa4sUlYt+jJxG5Nwk2FoT1NrwLQ7TtI7zvm6/NinA==} peerDependencies: '@firebase/app-compat': 0.x dependencies: - '@firebase/app-compat': 0.1.35 - '@firebase/component': 0.5.18 - '@firebase/storage': 0.9.10_@firebase+app@0.8.0 - '@firebase/storage-types': 0.6.0_hc4yn5f4ebzhrwwrb4uuunvgqi - '@firebase/util': 1.7.0 + '@firebase/app-compat': 0.1.37 + '@firebase/component': 0.5.20 + '@firebase/storage': 0.9.12_@firebase+app@0.8.2 + '@firebase/storage-types': 0.6.0_lmwpdx2fmxhc4czm5d7dj3yohq + '@firebase/util': 1.7.2 tslib: 2.4.0 transitivePeerDependencies: - '@firebase/app' @@ -2761,46 +2770,46 @@ packages: - encoding dev: false - /@firebase/storage-types/0.6.0_hc4yn5f4ebzhrwwrb4uuunvgqi: + /@firebase/storage-types/0.6.0_lmwpdx2fmxhc4czm5d7dj3yohq: resolution: {integrity: sha512-1LpWhcCb1ftpkP/akhzjzeFxgVefs6eMD2QeKiJJUGH1qOiows2w5o0sKCUSQrvrRQS1lz3SFGvNR1Ck/gqxeA==} peerDependencies: '@firebase/app-types': 0.x '@firebase/util': 1.x dependencies: '@firebase/app-types': 0.8.0 - '@firebase/util': 1.7.0 + '@firebase/util': 1.7.2 dev: false - /@firebase/storage/0.9.10_@firebase+app@0.8.0: - resolution: {integrity: sha512-GXJSP/VqWNGi3gD8d59y5Ls4iW/jkX4CKuI4T6oST6eNnLrJcx68JbeOSv+37c9eBVT1d8O7LFX3oeKVWBhvRg==} + /@firebase/storage/0.9.12_@firebase+app@0.8.2: + resolution: {integrity: sha512-XIAmje0ufvRrxrUU/9tvGCuUIy7WSJf3XM8Y8OV9EW2Dg1w4f8IpraLiUdlirdtFM0UAnO2kDQHoiVQYhRrADQ==} peerDependencies: '@firebase/app': 0.x dependencies: - '@firebase/app': 0.8.0 - '@firebase/component': 0.5.18 - '@firebase/util': 1.7.0 + '@firebase/app': 0.8.2 + '@firebase/component': 0.5.20 + '@firebase/util': 1.7.2 node-fetch: 2.6.7 tslib: 2.4.0 transitivePeerDependencies: - encoding dev: false - /@firebase/util/1.7.0: - resolution: {integrity: sha512-n5g1WWd+E5IYQwtKxmTJDlhfT762mk/d7yigeh8QaS46cnvngwguOhNwlS8fniEJ7pAgyZ9v05OQMKdfMnws6g==} + /@firebase/util/1.7.2: + resolution: {integrity: sha512-P3aTihYEMoz2QQlcn0T7av7HLEK9gsTc1ZiN9VA8wnUtEJscUNemCmTmP3RRysqEb3Z+tVVoycztY8f6R36rRw==} dependencies: tslib: 2.4.0 dev: false - /@firebase/webchannel-wrapper/0.7.0: - resolution: {integrity: sha512-4ACd/c6ushrLuhn0+yjB9hznhnsc2IML6pf0Ulb1Q7w8SvR1jNGPu/Y7i4kvOm6R+WJkMHwyy5z3i3gN+Tawug==} + /@firebase/webchannel-wrapper/0.8.0: + resolution: {integrity: sha512-Q8erQds5LuAUgNuFOt/tu/abffYUHYxN+Ogp2V5EOssfFG7Ja4ce324Sqyq41u/vB5CSr+tfYS3JzTDrDxCvdw==} dev: false - /@grpc/grpc-js/1.7.1: - resolution: {integrity: sha512-GVtMU4oh/TeKkWGzXUEsyZtyvSUIT1z49RtGH1UnEGeL+sLuxKl8QH3KZTlSB329R1sWJmesm5hQ5CxXdYH9dg==} + /@grpc/grpc-js/1.7.2: + resolution: {integrity: sha512-MqqbVynbe3VUSnApFW/dpkDaa9T1ASqRnMWeSPGFO/Ro98R7XUDLacfeBa7RaSI1iFu9GYk5gBKARf0zipFe4w==} engines: {node: ^8.13.0 || >=10.10.0} dependencies: '@grpc/proto-loader': 0.7.3 - '@types/node': 18.8.3 + '@types/node': 18.11.0 dev: false /@grpc/proto-loader/0.6.13: @@ -2847,11 +2856,11 @@ packages: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} dev: true - /@inboxsdk/core/0.2.17: - resolution: {integrity: sha512-pUG6NisEaYzx60s1I/pCZXJpS3I0sjEhWwjQAk7w+HZkDWEUbLgWGkXRxc2S+dLDZKGh5hc519VBvLFxr0iW+g==} + /@inboxsdk/core/0.2.20: + resolution: {integrity: sha512-zJSvtYBgPKqDVddTs7rsAY2yHL1oj678IpLPOPJLwZj+nvkiZC0eA60dX79Q2zHoyRB0uaYuPiwn7d2hvAb/2w==} dependencies: '@types/kefir': 3.8.7 - '@types/node': 18.8.3 + '@types/node': 18.11.0 typed-emitter: 2.1.0 dev: false @@ -2871,20 +2880,20 @@ packages: engines: {node: '>=8'} dev: true - /@jest/console/29.1.2: - resolution: {integrity: sha512-ujEBCcYs82BTmRxqfHMQggSlkUZP63AE5YEaTPj7eFyJOzukkTorstOUC7L6nE3w5SYadGVAnTsQ/ZjTGL0qYQ==} + /@jest/console/29.2.0: + resolution: {integrity: sha512-Xz1Wu+ZZxcB3RS8U3HdkFxlRJ7kLXI/by9X7d2/gvseIWPwYu/c1EsYy77cB5iyyHGOy3whS2HycjcuzIF4Jow==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.1.2 - '@types/node': 18.8.3 + '@jest/types': 29.2.0 + '@types/node': 18.11.0 chalk: 4.1.2 - jest-message-util: 29.1.2 - jest-util: 29.1.2 + jest-message-util: 29.2.0 + jest-util: 29.2.0 slash: 3.0.0 dev: true - /@jest/core/29.1.2: - resolution: {integrity: sha512-sCO2Va1gikvQU2ynDN8V4+6wB7iVrD2CvT0zaRst4rglf56yLly0NQ9nuRRAWFeimRf+tCdFsb1Vk1N9LrrMPA==} + /@jest/core/29.2.0: + resolution: {integrity: sha512-+gyJ3bX+kGEW/eqt/0kI7fLjqiFr3AN8O+rlEl1fYRf7D8h4Sj4tBGo9YOSirvWgvemoH2EPRya35bgvcPFzHQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -2892,32 +2901,32 @@ packages: node-notifier: optional: true dependencies: - '@jest/console': 29.1.2 - '@jest/reporters': 29.1.2 - '@jest/test-result': 29.1.2 - '@jest/transform': 29.1.2 - '@jest/types': 29.1.2 - '@types/node': 18.8.3 + '@jest/console': 29.2.0 + '@jest/reporters': 29.2.0 + '@jest/test-result': 29.2.0 + '@jest/transform': 29.2.0 + '@jest/types': 29.2.0 + '@types/node': 18.11.0 ansi-escapes: 4.3.2 chalk: 4.1.2 - ci-info: 3.4.0 + ci-info: 3.5.0 exit: 0.1.2 graceful-fs: 4.2.10 - jest-changed-files: 29.0.0 - jest-config: 29.1.2_@types+node@18.8.3 - jest-haste-map: 29.1.2 - jest-message-util: 29.1.2 - jest-regex-util: 29.0.0 - jest-resolve: 29.1.2 - jest-resolve-dependencies: 29.1.2 - jest-runner: 29.1.2 - jest-runtime: 29.1.2 - jest-snapshot: 29.1.2 - jest-util: 29.1.2 - jest-validate: 29.1.2 - jest-watcher: 29.1.2 + jest-changed-files: 29.2.0 + jest-config: 29.2.0_@types+node@18.11.0 + jest-haste-map: 29.2.0 + jest-message-util: 29.2.0 + jest-regex-util: 29.2.0 + jest-resolve: 29.2.0 + jest-resolve-dependencies: 29.2.0 + jest-runner: 29.2.0 + jest-runtime: 29.2.0 + jest-snapshot: 29.2.0 + jest-util: 29.2.0 + jest-validate: 29.2.0 + jest-watcher: 29.2.0 micromatch: 4.0.5 - pretty-format: 29.1.2 + pretty-format: 29.2.0 slash: 3.0.0 strip-ansi: 6.0.1 transitivePeerDependencies: @@ -2925,14 +2934,14 @@ packages: - ts-node dev: true - /@jest/environment/29.1.2: - resolution: {integrity: sha512-rG7xZ2UeOfvOVzoLIJ0ZmvPl4tBEQ2n73CZJSlzUjPw4or1oSWC0s0Rk0ZX+pIBJ04aVr6hLWFn1DFtrnf8MhQ==} + /@jest/environment/29.2.0: + resolution: {integrity: sha512-foaVv1QVPB31Mno3LlL58PxEQQOLZd9zQfCpyQQCQIpUAtdFP1INBjkphxrCfKT13VxpA0z5jFGIkmZk0DAg2Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/fake-timers': 29.1.2 - '@jest/types': 29.1.2 - '@types/node': 18.8.3 - jest-mock: 29.1.2 + '@jest/fake-timers': 29.2.0 + '@jest/types': 29.2.0 + '@types/node': 18.11.0 + jest-mock: 29.2.0 dev: true /@jest/expect-utils/29.1.2: @@ -2942,42 +2951,49 @@ packages: jest-get-type: 29.0.0 dev: true - /@jest/expect/29.1.2: - resolution: {integrity: sha512-FXw/UmaZsyfRyvZw3M6POgSNqwmuOXJuzdNiMWW9LCYo0GRoRDhg+R5iq5higmRTHQY7hx32+j7WHwinRmoILQ==} + /@jest/expect-utils/29.2.0: + resolution: {integrity: sha512-nz2IDF7nb1qmj9hx8Ja3MFab2q9Ml8QbOaaeJNyX5JQJHU8QUvEDiMctmhGEkk3Kzr8w8vAqz4hPk/ogJSrUhg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - expect: 29.1.2 - jest-snapshot: 29.1.2 + jest-get-type: 29.2.0 + dev: true + + /@jest/expect/29.2.0: + resolution: {integrity: sha512-+3lxcYL9e0xPJGOR33utxxejn+Mulz40kY0oy0FVsmIESW87NZDJ7B1ovaIqeX0xIgPX4laS5SGlqD2uSoBMcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + expect: 29.2.0 + jest-snapshot: 29.2.0 transitivePeerDependencies: - supports-color dev: true - /@jest/fake-timers/29.1.2: - resolution: {integrity: sha512-GppaEqS+QQYegedxVMpCe2xCXxxeYwQ7RsNx55zc8f+1q1qevkZGKequfTASI7ejmg9WwI+SJCrHe9X11bLL9Q==} + /@jest/fake-timers/29.2.0: + resolution: {integrity: sha512-mX0V0uQsgeSLTt0yTqanAhhpeUKMGd2uq+PSLAfO40h72bvfNNQ7pIEl9vIwNMFxRih1ENveEjSBsLjxGGDPSw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.1.2 + '@jest/types': 29.2.0 '@sinonjs/fake-timers': 9.1.2 - '@types/node': 18.8.3 - jest-message-util: 29.1.2 - jest-mock: 29.1.2 - jest-util: 29.1.2 + '@types/node': 18.11.0 + jest-message-util: 29.2.0 + jest-mock: 29.2.0 + jest-util: 29.2.0 dev: true - /@jest/globals/29.1.2: - resolution: {integrity: sha512-uMgfERpJYoQmykAd0ffyMq8wignN4SvLUG6orJQRe9WAlTRc9cdpCaE/29qurXixYJVZWUqIBXhSk8v5xN1V9g==} + /@jest/globals/29.2.0: + resolution: {integrity: sha512-JQxtEVNWiai1p3PIzAJZSyEqQdAJGvNKvinZDPfu0mhiYEVx6E+PiBuDWj1sVUW8hzu+R3DVqaWC9K2xcLRIAA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.1.2 - '@jest/expect': 29.1.2 - '@jest/types': 29.1.2 - jest-mock: 29.1.2 + '@jest/environment': 29.2.0 + '@jest/expect': 29.2.0 + '@jest/types': 29.2.0 + jest-mock: 29.2.0 transitivePeerDependencies: - supports-color dev: true - /@jest/reporters/29.1.2: - resolution: {integrity: sha512-X4fiwwyxy9mnfpxL0g9DD0KcTmEIqP0jUdnc2cfa9riHy+I6Gwwp5vOZiwyg0vZxfSDxrOlK9S4+340W4d+DAA==} + /@jest/reporters/29.2.0: + resolution: {integrity: sha512-BXoAJatxTZ18U0cwD7C8qBo8V6vef8AXYRBZdhqE5DF9CmpqmhMfw9c7OUvYqMTnBBK9A0NgXGO4Lc9EJzdHvw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -2986,29 +3002,28 @@ packages: optional: true dependencies: '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 29.1.2 - '@jest/test-result': 29.1.2 - '@jest/transform': 29.1.2 - '@jest/types': 29.1.2 - '@jridgewell/trace-mapping': 0.3.15 - '@types/node': 18.8.3 + '@jest/console': 29.2.0 + '@jest/test-result': 29.2.0 + '@jest/transform': 29.2.0 + '@jest/types': 29.2.0 + '@jridgewell/trace-mapping': 0.3.17 + '@types/node': 18.11.0 chalk: 4.1.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 glob: 7.2.3 graceful-fs: 4.2.10 istanbul-lib-coverage: 3.2.0 - istanbul-lib-instrument: 5.2.0 + istanbul-lib-instrument: 5.2.1 istanbul-lib-report: 3.0.0 istanbul-lib-source-maps: 4.0.1 istanbul-reports: 3.1.5 - jest-message-util: 29.1.2 - jest-util: 29.1.2 - jest-worker: 29.1.2 + jest-message-util: 29.2.0 + jest-util: 29.2.0 + jest-worker: 29.2.0 slash: 3.0.0 string-length: 4.0.2 strip-ansi: 6.0.1 - terminal-link: 2.1.1 v8-to-istanbul: 9.0.1 transitivePeerDependencies: - supports-color @@ -3018,53 +3033,53 @@ packages: resolution: {integrity: sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@sinclair/typebox': 0.24.44 + '@sinclair/typebox': 0.24.46 dev: true - /@jest/source-map/29.0.0: - resolution: {integrity: sha512-nOr+0EM8GiHf34mq2GcJyz/gYFyLQ2INDhAylrZJ9mMWoW21mLBfZa0BUVPPMxVYrLjeiRe2Z7kWXOGnS0TFhQ==} + /@jest/source-map/29.2.0: + resolution: {integrity: sha512-1NX9/7zzI0nqa6+kgpSdKPK+WU1p+SJk3TloWZf5MzPbxri9UEeXX5bWZAPCzbQcyuAzubcdUHA7hcNznmRqWQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jridgewell/trace-mapping': 0.3.15 + '@jridgewell/trace-mapping': 0.3.17 callsites: 3.1.0 graceful-fs: 4.2.10 dev: true - /@jest/test-result/29.1.2: - resolution: {integrity: sha512-jjYYjjumCJjH9hHCoMhA8PCl1OxNeGgAoZ7yuGYILRJX9NjgzTN0pCT5qAoYR4jfOP8htIByvAlz9vfNSSBoVg==} + /@jest/test-result/29.2.0: + resolution: {integrity: sha512-l76EPJ6QqtzsCLS4aimJqWO53pxZ82o3aE+Brcmo1HJ/phb9+MR7gPhyDdN6VSGaLJCRVJBZgWEhAEz+qON0Fw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/console': 29.1.2 - '@jest/types': 29.1.2 + '@jest/console': 29.2.0 + '@jest/types': 29.2.0 '@types/istanbul-lib-coverage': 2.0.4 collect-v8-coverage: 1.0.1 dev: true - /@jest/test-sequencer/29.1.2: - resolution: {integrity: sha512-fU6dsUqqm8sA+cd85BmeF7Gu9DsXVWFdGn9taxM6xN1cKdcP/ivSgXh5QucFRFz1oZxKv3/9DYYbq0ULly3P/Q==} + /@jest/test-sequencer/29.2.0: + resolution: {integrity: sha512-NCnjZcGnVdva6IDqF7TCuFsXs2F1tohiNF9sasSJNzD7VfN5ic9XgcS/oPDalGiPLxCmGKj4kewqqrKAqBACcQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/test-result': 29.1.2 + '@jest/test-result': 29.2.0 graceful-fs: 4.2.10 - jest-haste-map: 29.1.2 + jest-haste-map: 29.2.0 slash: 3.0.0 dev: true - /@jest/transform/29.1.2: - resolution: {integrity: sha512-2uaUuVHTitmkx1tHF+eBjb4p7UuzBG7SXIaA/hNIkaMP6K+gXYGxP38ZcrofzqN0HeZ7A90oqsOa97WU7WZkSw==} + /@jest/transform/29.2.0: + resolution: {integrity: sha512-NXMujGHy+B4DAj4dGnVPD0SIXlR2Z/N8Gp9h3mF66kcIRult1WWqY3/CEIrJcKviNWaFPYhZjCG2L3fteWzcUw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/core': 7.19.3 - '@jest/types': 29.1.2 - '@jridgewell/trace-mapping': 0.3.15 + '@jest/types': 29.2.0 + '@jridgewell/trace-mapping': 0.3.17 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 - convert-source-map: 1.8.0 + convert-source-map: 1.9.0 fast-json-stable-stringify: 2.1.0 graceful-fs: 4.2.10 - jest-haste-map: 29.1.2 - jest-regex-util: 29.0.0 - jest-util: 29.1.2 + jest-haste-map: 29.2.0 + jest-regex-util: 29.2.0 + jest-util: 29.2.0 micromatch: 4.0.5 pirates: 4.0.5 slash: 3.0.0 @@ -3073,14 +3088,14 @@ packages: - supports-color dev: true - /@jest/types/29.1.2: - resolution: {integrity: sha512-DcXGtoTykQB5jiwCmVr8H4vdg2OJhQex3qPkG+ISyDO7xQXbt/4R6dowcRyPemRnkH7JoHvZuxPBdlq+9JxFCg==} + /@jest/types/29.2.0: + resolution: {integrity: sha512-mfgpQz4Z2xGo37m6KD8xEpKelaVzvYVRijmLPePn9pxgaPEtX+SqIyPNzzoeCPXKYbB4L/wYSgXDL8o3Gop78Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/schemas': 29.0.0 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 18.8.3 + '@types/node': 18.11.0 '@types/yargs': 17.0.13 chalk: 4.1.2 dev: true @@ -3098,7 +3113,7 @@ packages: dependencies: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.14 - '@jridgewell/trace-mapping': 0.3.15 + '@jridgewell/trace-mapping': 0.3.17 /@jridgewell/resolve-uri/3.1.0: resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} @@ -3112,7 +3127,7 @@ packages: resolution: {integrity: sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==} dependencies: '@jridgewell/gen-mapping': 0.3.2 - '@jridgewell/trace-mapping': 0.3.15 + '@jridgewell/trace-mapping': 0.3.17 /@jridgewell/sourcemap-codec/1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} @@ -3123,6 +3138,12 @@ packages: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 + /@jridgewell/trace-mapping/0.3.17: + resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} + dependencies: + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.14 + /@lezer/common/0.15.12: resolution: {integrity: sha512-edfwCxNLnzq5pBA/yaIhwJ3U3Kz8VAUOTRg0hhxaizaI1N+qxV7EXDv/kLCkLeq2RzSFvxexlaj5Mzfn2kY0Ig==} @@ -3223,8 +3244,8 @@ packages: requiresBuild: true optional: true - /@mui/base/5.0.0-alpha.100_rj7ozvcq3uehdlnj3cbwzbi5ce: - resolution: {integrity: sha512-bSoJEKCENtmJrJDECHUe9PiqztIUACuSskyqw9ypqE7Dz3WxL3e8puFsWBkUsz+WOCjXh4B4Xljn88Ucxxv5HA==} + /@mui/base/5.0.0-alpha.101_rj7ozvcq3uehdlnj3cbwzbi5ce: + resolution: {integrity: sha512-a54BcXvArGOKUZ2zyS/7B9GNhAGgfomEQSkfEZ88Nc9jKvXA+Mppenfz5o4JCAnD8c4VlePmz9rKOYvvum1bZw==} engines: {node: '>=12.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 @@ -3234,10 +3255,10 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.19.0 + '@babel/runtime': 7.19.4 '@emotion/is-prop-valid': 1.2.0 '@mui/types': 7.2.0_@types+react@18.0.21 - '@mui/utils': 5.10.6_react@18.2.0 + '@mui/utils': 5.10.9_react@18.2.0 '@popperjs/core': 2.11.6 '@types/react': 18.0.21 clsx: 1.2.1 @@ -3247,12 +3268,12 @@ packages: react-is: 18.2.0 dev: false - /@mui/core-downloads-tracker/5.10.8: - resolution: {integrity: sha512-V5D7OInO4P9PdT/JACg7fwjbOORm3GklaMVgdGomjyxiyetgRND5CC9r35e1LK/DqHdoyDuhbFzdfrqWtpmEIw==} + /@mui/core-downloads-tracker/5.10.9: + resolution: {integrity: sha512-rqoFu4qww6KJBbXYhyRd9YXjwBHa3ylnBPSWbGf1bdfG0AYMKmVzg8zxkWvxAWOp97kvx3M2kNPb0xMIDZiogQ==} dev: false - /@mui/material/5.10.8_ikcgkdnp4bn3rgptamntbhbo7e: - resolution: {integrity: sha512-sF/Ka0IJjGXV52zoT4xAWEqXVRjNYbIjATo9L4Q5oQC5iJpGrKJFY16uNtWWB0+vp/nayAuPGZHrxtV+t3ecdQ==} + /@mui/material/5.10.9_ikcgkdnp4bn3rgptamntbhbo7e: + resolution: {integrity: sha512-sdOzlgpCmyw48je+E7o9UGGJpgBaF+60FlTRpVpcd/z+LUhnuzzuis891yPI5dPPXLBDL/bO4SsGg51lgNeLBw==} engines: {node: '>=12.0.0'} peerDependencies: '@emotion/react': ^11.5.0 @@ -3268,14 +3289,14 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.19.0 + '@babel/runtime': 7.19.4 '@emotion/react': 11.10.4_bjroym7kxlcs2vvwnej4p3gzwu '@emotion/styled': 11.10.4_ogudqqhlstsi7uge4lir7ff3ty - '@mui/base': 5.0.0-alpha.100_rj7ozvcq3uehdlnj3cbwzbi5ce - '@mui/core-downloads-tracker': 5.10.8 - '@mui/system': 5.10.8_h33l6npc22g7vcra72cibfsrvm + '@mui/base': 5.0.0-alpha.101_rj7ozvcq3uehdlnj3cbwzbi5ce + '@mui/core-downloads-tracker': 5.10.9 + '@mui/system': 5.10.9_h33l6npc22g7vcra72cibfsrvm '@mui/types': 7.2.0_@types+react@18.0.21 - '@mui/utils': 5.10.6_react@18.2.0 + '@mui/utils': 5.10.9_react@18.2.0 '@types/react': 18.0.21 '@types/react-transition-group': 4.4.5 clsx: 1.2.1 @@ -3287,8 +3308,8 @@ packages: react-transition-group: 4.4.5_biqbaboplfbrettd7655fr4n2y dev: false - /@mui/private-theming/5.10.6_iapumuv4e6jcjznwuxpf4tt22e: - resolution: {integrity: sha512-I/W0QyTLRdEx6py3lKAquKO/rNF/7j+nIOM/xCyI9kU0fcotVTcTY08mKMsS6vrzdWpi6pAkD0wP0KwWy5R5VA==} + /@mui/private-theming/5.10.9_iapumuv4e6jcjznwuxpf4tt22e: + resolution: {integrity: sha512-BN7/CnsVPVyBaQpDTij4uV2xGYHHHhOgpdxeYLlIu+TqnsVM7wUeF+37kXvHovxM6xmL5qoaVUD98gDC0IZnHg==} engines: {node: '>=12.0.0'} peerDependencies: '@types/react': ^17.0.0 || ^18.0.0 @@ -3297,8 +3318,8 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.19.0 - '@mui/utils': 5.10.6_react@18.2.0 + '@babel/runtime': 7.19.4 + '@mui/utils': 5.10.9_react@18.2.0 '@types/react': 18.0.21 prop-types: 15.8.1 react: 18.2.0 @@ -3317,7 +3338,7 @@ packages: '@emotion/styled': optional: true dependencies: - '@babel/runtime': 7.19.0 + '@babel/runtime': 7.19.4 '@emotion/cache': 11.10.3 '@emotion/react': 11.10.4_bjroym7kxlcs2vvwnej4p3gzwu '@emotion/styled': 11.10.4_ogudqqhlstsi7uge4lir7ff3ty @@ -3326,8 +3347,8 @@ packages: react: 18.2.0 dev: false - /@mui/system/5.10.8_h33l6npc22g7vcra72cibfsrvm: - resolution: {integrity: sha512-hRQ354zcrYP/KHqK8FheICSvE9raQaUgQaV+A3oD4JETaFUCVI9Ytt+RcQYgTqx02xlCXIjl8LK1rPjTneySqw==} + /@mui/system/5.10.9_h33l6npc22g7vcra72cibfsrvm: + resolution: {integrity: sha512-B6fFC0sK06hNmqY7fAUfwShQv594+u/DT1YEFHPtK4laouTu7V4vSGQWi1WJT9Bjs9Db5D1bRDJ+Yy+tc3QOYA==} engines: {node: '>=12.0.0'} peerDependencies: '@emotion/react': ^11.5.0 @@ -3342,13 +3363,13 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.19.0 + '@babel/runtime': 7.19.4 '@emotion/react': 11.10.4_bjroym7kxlcs2vvwnej4p3gzwu '@emotion/styled': 11.10.4_ogudqqhlstsi7uge4lir7ff3ty - '@mui/private-theming': 5.10.6_iapumuv4e6jcjznwuxpf4tt22e + '@mui/private-theming': 5.10.9_iapumuv4e6jcjznwuxpf4tt22e '@mui/styled-engine': 5.10.8_hfzxdiydbrbhhfpkwuv3jhvwmq '@mui/types': 7.2.0_@types+react@18.0.21 - '@mui/utils': 5.10.6_react@18.2.0 + '@mui/utils': 5.10.9_react@18.2.0 '@types/react': 18.0.21 clsx: 1.2.1 csstype: 3.1.1 @@ -3367,13 +3388,13 @@ packages: '@types/react': 18.0.21 dev: false - /@mui/utils/5.10.6_react@18.2.0: - resolution: {integrity: sha512-g0Qs8xN/MW2M3fLL8197h5J2VB9U+49fLlnKKqC6zy/yus5cZwdT+Gwec+wUMxgwQoxMDn+J8oDWAn28kEOR/Q==} + /@mui/utils/5.10.9_react@18.2.0: + resolution: {integrity: sha512-2tdHWrq3+WCy+G6TIIaFx3cg7PorXZ71P375ExuX61od1NOAJP1mK90VxQ8N4aqnj2vmO3AQDkV4oV2Ktvt4bA==} engines: {node: '>=12.0.0'} peerDependencies: react: ^17.0.0 || ^18.0.0 dependencies: - '@babel/runtime': 7.19.0 + '@babel/runtime': 7.19.4 '@types/prop-types': 15.7.5 '@types/react-is': 17.0.3 prop-types: 15.8.1 @@ -4043,7 +4064,7 @@ packages: browserslist: 4.21.4 detect-libc: 1.0.3 nullthrows: 1.1.1 - regenerator-runtime: 0.13.9 + regenerator-runtime: 0.13.10 semver: 5.7.1 /@parcel/transformer-json/2.7.0_@parcel+core@2.7.0: @@ -4149,6 +4170,17 @@ packages: - '@parcel/core' dev: false + /@parcel/types/2.7.0: + resolution: {integrity: sha512-+dhXVUnseTCpJvBTGMp0V6X13z6O/A/+CUtwEpMGZ8XSmZ4Gk44GvaTiBOp0bJpWG4fvCKp+UmC8PYbrDiiziw==} + dependencies: + '@parcel/cache': 2.7.0_@parcel+core@2.7.0 + '@parcel/diagnostic': 2.7.0 + '@parcel/fs': 2.7.0_@parcel+core@2.7.0 + '@parcel/package-manager': 2.7.0_@parcel+core@2.7.0 + '@parcel/source-map': 2.1.1 + '@parcel/workers': 2.7.0_@parcel+core@2.7.0 + utility-types: 3.10.0 + /@parcel/types/2.7.0_@parcel+core@2.7.0: resolution: {integrity: sha512-+dhXVUnseTCpJvBTGMp0V6X13z6O/A/+CUtwEpMGZ8XSmZ4Gk44GvaTiBOp0bJpWG4fvCKp+UmC8PYbrDiiziw==} dependencies: @@ -4191,7 +4223,7 @@ packages: '@parcel/core': 2.7.0 '@parcel/diagnostic': 2.7.0 '@parcel/logger': 2.7.0 - '@parcel/types': 2.7.0_@parcel+core@2.7.0 + '@parcel/types': 2.7.0 '@parcel/utils': 2.7.0 chrome-trace-event: 1.0.3 nullthrows: 1.1.1 @@ -4413,8 +4445,8 @@ packages: resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} dev: false - /@reduxjs/toolkit/1.8.5_kuo2ie247izvzll3jejufdtq3q: - resolution: {integrity: sha512-f4D5EXO7A7Xq35T0zRbWq5kJQyXzzscnHKmjnu2+37B3rwHU6mX9PYlbfXdnxcY6P/7zfmjhgan0Z+yuOfeBmA==} + /@reduxjs/toolkit/1.8.6_kuo2ie247izvzll3jejufdtq3q: + resolution: {integrity: sha512-4Ia/Loc6WLmdSOzi7k5ff7dLK8CgG2b8aqpLsCAJhazAzGdp//YBUSaj0ceW6a3kDBDNRrq5CRwyCS0wBiL1ig==} peerDependencies: react: ^16.9.0 || ^17.0.0 || ^18 react-redux: ^7.2.1 || ^8.0.2 @@ -4437,8 +4469,8 @@ packages: engines: {node: '>=14'} dev: false - /@sinclair/typebox/0.24.44: - resolution: {integrity: sha512-ka0W0KN5i6LfrSocduwliMMpqVgohtPFidKdMEOUjoOFCHcOOYkKsPRxfs5f15oPNHTm6ERAm0GV/+/LTKeiWg==} + /@sinclair/typebox/0.24.46: + resolution: {integrity: sha512-ng4ut1z2MCBhK/NwDVwIQp3pAUOCs/KNaW3cBxdFB2xTDrOuo1xuNmpr/9HHFhxqIvHrs1NTH3KJg6q+JSy1Kw==} dev: true /@sindresorhus/is/5.3.0: @@ -4458,32 +4490,32 @@ packages: '@sinonjs/commons': 1.8.3 dev: true - /@supabase/functions-js/1.3.4: - resolution: {integrity: sha512-yYVgkECjv7IZEBKBI3EB5Q7R1p0FJ10g8Q9N7SWKIHUU6i6DnbEGHIMFLyQRm1hmiNWD8fL7bRVEYacmTRJhHw==} + /@supabase/functions-js/2.0.0: + resolution: {integrity: sha512-ozb7bds2yvf5k7NM2ZzUkxvsx4S4i2eRKFSJetdTADV91T65g4gCzEs9L3LUXSrghcGIkUaon03VPzOrFredqg==} dependencies: cross-fetch: 3.1.5 transitivePeerDependencies: - encoding dev: false - /@supabase/gotrue-js/1.22.22: - resolution: {integrity: sha512-exbCopLo4tLawKZR25wEdipm+IRVujuqFRR4h2wiXd11YA+N8rfgg/4S4L6BTFHmzV+KMjy0kDF3yMbsjIR/xA==} + /@supabase/gotrue-js/2.0.1: + resolution: {integrity: sha512-PCzHeFhz33lPWLZT+UiVDpGkZQI3K1wwhkhgAjvJdkyCbwK5u+LWWUzz0AX66bGGLpg1IYQIP7oz8V68XVjzMA==} dependencies: cross-fetch: 3.1.5 transitivePeerDependencies: - encoding dev: false - /@supabase/postgrest-js/0.37.4: - resolution: {integrity: sha512-x+c2rk1fz9s6f1PrGxCJ0QTUgXPDI0G3ngIqD5sSiXhhCyfl8Q5V92mXl2EYtlDhkiUkjFNrOZFhXVbXOHgvDw==} + /@supabase/postgrest-js/1.0.0: + resolution: {integrity: sha512-MRR4g8dThgSnlnjkL2Jvc6gS73W68hLq48/Q245CLvUPt3KtOh3WXpvo4rZDEDHYVkyVga+L9IQixo6YTsjMQg==} dependencies: cross-fetch: 3.1.5 transitivePeerDependencies: - encoding dev: false - /@supabase/realtime-js/1.7.5: - resolution: {integrity: sha512-nXuoxt7NE1NTI+G8WBim1K2gkUC8YE3e9evBUG+t6xwd9Sq+sSOrjcE0qJ8/Y631BCnLzlhX6yhFYQFh1oQDOg==} + /@supabase/realtime-js/2.0.0: + resolution: {integrity: sha512-DJVt5Z76pik3Fxt1es4fmquq6GrwR3nLqcb2Q6VpHXSudtixML0Cyxsu0DPzxa6ruSQrO9s08s0OQgwaIA1C0Q==} dependencies: '@types/phoenix': 1.5.4 websocket: 1.0.34 @@ -4491,22 +4523,23 @@ packages: - supports-color dev: false - /@supabase/storage-js/1.7.3: - resolution: {integrity: sha512-jnIZWqOc9TGclOozgX9v/RWGFCgJAyW/yvmauexgRZhWknUXoA4b2i8tj7vfwE0WTvNRuA5JpXID98rfJeSG7Q==} + /@supabase/storage-js/2.0.0: + resolution: {integrity: sha512-7kXThdRt/xqnOOvZZxBqNkeX1CFNUWc0hYBJtNN/Uvt8ok9hD14foYmroWrHn046wEYFqUrB9U35JYsfTrvltA==} dependencies: cross-fetch: 3.1.5 transitivePeerDependencies: - encoding dev: false - /@supabase/supabase-js/1.35.7: - resolution: {integrity: sha512-X+qCzmj5sH0dozagbLoK7LzysBaWoivO0gsAUAPPBQkQupQWuBfaOqG18gKhlfL0wp2PL888QzhQNScp/IwUfA==} + /@supabase/supabase-js/2.0.0: + resolution: {integrity: sha512-8nNMXYzBlQVSDONFaNgyyxsAdUY+C9Q/7vEDYDdTFTyC3i+luXTDOSjHMLcjIky/+x5rIAcNQqqIJ48HJUluXA==} dependencies: - '@supabase/functions-js': 1.3.4 - '@supabase/gotrue-js': 1.22.22 - '@supabase/postgrest-js': 0.37.4 - '@supabase/realtime-js': 1.7.5 - '@supabase/storage-js': 1.7.3 + '@supabase/functions-js': 2.0.0 + '@supabase/gotrue-js': 2.0.1 + '@supabase/postgrest-js': 1.0.0 + '@supabase/realtime-js': 2.0.0 + '@supabase/storage-js': 2.0.0 + cross-fetch: 3.1.5 transitivePeerDependencies: - encoding - supports-color @@ -4530,7 +4563,7 @@ packages: tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1' dependencies: mini-svg-data-uri: 1.4.4 - tailwindcss: 3.1.8_postcss@8.4.17 + tailwindcss: 3.1.8_postcss@8.4.18 dev: false /@tailwindcss/typography/0.5.7_tailwindcss@3.1.8: @@ -4542,15 +4575,15 @@ packages: lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 postcss-selector-parser: 6.0.10 - tailwindcss: 3.1.8_postcss@8.4.17 + tailwindcss: 3.1.8_postcss@8.4.18 dev: false - /@tanstack/query-core/4.10.3: - resolution: {integrity: sha512-+ME02sUmBfx3Pjd+0XtEthK8/4rVMD2jcxvnW9DSgFONpKtpjzfRzjY4ykzpDw1QEo2eoPvl7NS8J5mNI199aA==} + /@tanstack/query-core/4.12.0: + resolution: {integrity: sha512-KEiFPNLMFByhNL2s6RBFL6Z5cNdwwQzFpW/II3GY+rEuQ343ZEoVyQ48zlUXXkEkbamQFIFg2onM8Pxf0Yo01A==} dev: false - /@tanstack/react-query/4.10.3_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-4OEJjkcsCTmG3ui7RjsVzsXerWQvInTe95CBKFyOV/GchMUlNztoFnnYmlMhX7hLUqJMhbG9l7M507V7+xU8Hw==} + /@tanstack/react-query/4.12.0_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-prchV1q+CJ0ZVo8Rts2cOF3azDfQizZZySmH6XXsXRcPTbir0sgb9fp0vY/5l5ZkSYjTvWt/OL8WQhAhYMSvrA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -4561,7 +4594,7 @@ packages: react-native: optional: true dependencies: - '@tanstack/query-core': 4.10.3 + '@tanstack/query-core': 4.12.0 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 use-sync-external-store: 1.2.0_react@18.2.0 @@ -4631,8 +4664,8 @@ packages: /@types/babel__core/7.1.19: resolution: {integrity: sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==} dependencies: - '@babel/parser': 7.19.3 - '@babel/types': 7.19.3 + '@babel/parser': 7.19.4 + '@babel/types': 7.19.4 '@types/babel__generator': 7.6.4 '@types/babel__template': 7.4.1 '@types/babel__traverse': 7.18.2 @@ -4641,33 +4674,33 @@ packages: /@types/babel__generator/7.6.4: resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} dependencies: - '@babel/types': 7.19.3 + '@babel/types': 7.19.4 dev: true /@types/babel__template/7.4.1: resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} dependencies: - '@babel/parser': 7.19.3 - '@babel/types': 7.19.3 + '@babel/parser': 7.19.4 + '@babel/types': 7.19.4 dev: true /@types/babel__traverse/7.18.2: resolution: {integrity: sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg==} dependencies: - '@babel/types': 7.19.3 + '@babel/types': 7.19.4 dev: true - /@types/chrome/0.0.197: - resolution: {integrity: sha512-m1NfS5bOjaypyqQfaX6CxmJodZVcvj5+Mt/K94EBHkflYjPNmXHAzbxfifdLMa0YM3PDyOxohoTS5ug/e6p5jA==} + /@types/chrome/0.0.198: + resolution: {integrity: sha512-zLn6JZXwSOOY0pw+dkIxItxvjsQThDkqaFnsnmr412Wa0MqesymfdTQ/0d30J/0wiFp3TYw0i63hzGGy0W7Paw==} dependencies: '@types/filesystem': 0.0.32 - '@types/har-format': 1.2.8 + '@types/har-format': 1.2.9 dev: true /@types/cross-spawn/6.0.2: resolution: {integrity: sha512-KuwNhp3eza+Rhu8IFI5HUXRP0LIhqH5cAjubUvGXXthh4YYBuP2ntwEX+Cz8GJoZUHlKo247wPWOfA9LYEq4cw==} dependencies: - '@types/node': 18.8.3 + '@types/node': 18.11.0 dev: true /@types/filesystem/0.0.32: @@ -4683,24 +4716,24 @@ packages: /@types/fs-extra/9.0.13: resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} dependencies: - '@types/node': 18.8.3 + '@types/node': 18.11.0 dev: true /@types/glob/8.0.0: resolution: {integrity: sha512-l6NQsDDyQUVeoTynNpC9uRvCUint/gSUXQA2euwmTuWGvPY5LSDUu6tkCtJB2SvGQlJQzLaKqcGZP4//7EDveA==} dependencies: '@types/minimatch': 5.1.2 - '@types/node': 18.8.3 + '@types/node': 18.11.0 dev: true /@types/graceful-fs/4.1.5: resolution: {integrity: sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==} dependencies: - '@types/node': 18.8.3 + '@types/node': 18.11.0 dev: true - /@types/har-format/1.2.8: - resolution: {integrity: sha512-OP6L9VuZNdskgNN3zFQQ54ceYD8OLq5IbqO4VK91ORLfOm7WdT/CiT/pHEBSQEqCInJ2y3O6iCm/zGtPElpgJQ==} + /@types/har-format/1.2.9: + resolution: {integrity: sha512-rffW6MhQ9yoa75bdNi+rjZBAvu2HhehWJXlhuWXnWdENeuKe82wUgAwxYOb7KRKKmxYN+D/iRKd2NDQMLqlUmg==} dev: true /@types/hoist-non-react-statics/3.3.1: @@ -4751,7 +4784,7 @@ packages: /@types/jsdom/20.0.0: resolution: {integrity: sha512-YfAchFs0yM1QPDrLm2VHe+WHGtqms3NXnXAMolrgrVP6fgBHHXy1ozAbo/dFtPNtZC/m66bPiCTWYmqp1F14gA==} dependencies: - '@types/node': 18.8.3 + '@types/node': 18.11.0 '@types/tough-cookie': 4.0.2 parse5: 7.1.1 dev: true @@ -4763,7 +4796,7 @@ packages: /@types/kefir/3.8.7: resolution: {integrity: sha512-2flvlUgAgLmMUje9dGmvQ2jNzNCc3aKm912z1qrjxrRWQT6iglAq28f7m9xcScHjV1QPH6LosRvR4bTUAgAO2w==} dependencies: - '@types/node': 18.8.3 + '@types/node': 18.11.0 dev: false /@types/lodash.clone/4.5.7: @@ -4793,15 +4826,15 @@ packages: /@types/node-rsa/1.1.1: resolution: {integrity: sha512-itzxtaBgk4OMbrCawVCvas934waMZWjW17v7EYgFVlfYS/cl0/P7KZdojWCq9SDJMI5cnLQLUP8ayhVCTY8TEg==} dependencies: - '@types/node': 18.8.3 + '@types/node': 18.11.0 dev: true /@types/node/11.11.6: resolution: {integrity: sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==} dev: false - /@types/node/18.8.3: - resolution: {integrity: sha512-0os9vz6BpGwxGe9LOhgP/ncvYN5Tx1fNcd2TM3rD/aCGBkysb+ZWpXEocG24h6ZzOi13+VB8HndAQFezsSOw1w==} + /@types/node/18.11.0: + resolution: {integrity: sha512-IOXCvVRToe7e0ny7HpT/X9Rb2RYtElG1a+VshjwT00HxrM2dWBApHQoqsI6WiY7Q03vdf2bCrIGzVrkF/5t10w==} /@types/normalize-package-data/2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} @@ -4852,7 +4885,7 @@ packages: /@types/sass/1.43.1: resolution: {integrity: sha512-BPdoIt1lfJ6B7rw35ncdwBZrAssjcwzI5LByIrYs+tpXlj/CAkuVdRsgZDdP4lq5EjyWzwxZCqAoFyHKFwp32g==} dependencies: - '@types/node': 18.8.3 + '@types/node': 18.11.0 dev: false /@types/scheduler/0.16.2: @@ -4865,7 +4898,7 @@ packages: /@types/sharp/0.31.0: resolution: {integrity: sha512-nwivOU101fYInCwdDcH/0/Ru6yIRXOpORx25ynEOc6/IakuCmjOAGpaO5VfUl4QkDtUC6hj+Z2eCQvgXOioknw==} dependencies: - '@types/node': 18.8.3 + '@types/node': 18.11.0 dev: true /@types/shell-quote/1.7.1: @@ -4875,7 +4908,7 @@ packages: /@types/simple-peer/9.11.5: resolution: {integrity: sha512-haXgWcAa3Y3Sn+T8lzkE4ErQUpYzhW6Cz2lh00RhQTyWt+xZ3s87wJPztUxlqSdFRqGhe2MQIBd0XsyHP3No4w==} dependencies: - '@types/node': 18.8.3 + '@types/node': 18.11.0 dev: true /@types/stack-utils/2.0.1: @@ -4885,7 +4918,7 @@ packages: /@types/through/0.0.30: resolution: {integrity: sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==} dependencies: - '@types/node': 18.8.3 + '@types/node': 18.11.0 dev: true /@types/tough-cookie/4.0.2: @@ -4914,78 +4947,78 @@ packages: '@types/yargs-parser': 21.0.0 dev: true - /@vue/compiler-core/3.2.40: - resolution: {integrity: sha512-2Dc3Stk0J/VyQ4OUr2yEC53kU28614lZS+bnrCbFSAIftBJ40g/2yQzf4mPBiFuqguMB7hyHaujdgZAQ67kZYA==} + /@vue/compiler-core/3.2.41: + resolution: {integrity: sha512-oA4mH6SA78DT+96/nsi4p9DX97PHcNROxs51lYk7gb9Z4BPKQ3Mh+BLn6CQZBw857Iuhu28BfMSRHAlPvD4vlw==} dependencies: - '@babel/parser': 7.19.3 - '@vue/shared': 3.2.40 + '@babel/parser': 7.19.4 + '@vue/shared': 3.2.41 estree-walker: 2.0.2 source-map: 0.6.1 - /@vue/compiler-dom/3.2.40: - resolution: {integrity: sha512-OZCNyYVC2LQJy4H7h0o28rtk+4v+HMQygRTpmibGoG9wZyomQiS5otU7qo3Wlq5UfHDw2RFwxb9BJgKjVpjrQw==} + /@vue/compiler-dom/3.2.41: + resolution: {integrity: sha512-xe5TbbIsonjENxJsYRbDJvthzqxLNk+tb3d/c47zgREDa/PCp6/Y4gC/skM4H6PIuX5DAxm7fFJdbjjUH2QTMw==} dependencies: - '@vue/compiler-core': 3.2.40 - '@vue/shared': 3.2.40 + '@vue/compiler-core': 3.2.41 + '@vue/shared': 3.2.41 - /@vue/compiler-sfc/3.2.40: - resolution: {integrity: sha512-tzqwniIN1fu1PDHC3CpqY/dPCfN/RN1thpBC+g69kJcrl7mbGiHKNwbA6kJ3XKKy8R6JLKqcpVugqN4HkeBFFg==} + /@vue/compiler-sfc/3.2.41: + resolution: {integrity: sha512-+1P2m5kxOeaxVmJNXnBskAn3BenbTmbxBxWOtBq3mQTCokIreuMULFantBUclP0+KnzNCMOvcnKinqQZmiOF8w==} dependencies: - '@babel/parser': 7.19.3 - '@vue/compiler-core': 3.2.40 - '@vue/compiler-dom': 3.2.40 - '@vue/compiler-ssr': 3.2.40 - '@vue/reactivity-transform': 3.2.40 - '@vue/shared': 3.2.40 + '@babel/parser': 7.19.4 + '@vue/compiler-core': 3.2.41 + '@vue/compiler-dom': 3.2.41 + '@vue/compiler-ssr': 3.2.41 + '@vue/reactivity-transform': 3.2.41 + '@vue/shared': 3.2.41 estree-walker: 2.0.2 magic-string: 0.25.9 - postcss: 8.4.17 + postcss: 8.4.18 source-map: 0.6.1 - /@vue/compiler-ssr/3.2.40: - resolution: {integrity: sha512-80cQcgasKjrPPuKcxwuCx7feq+wC6oFl5YaKSee9pV3DNq+6fmCVwEEC3vvkf/E2aI76rIJSOYHsWSEIxK74oQ==} + /@vue/compiler-ssr/3.2.41: + resolution: {integrity: sha512-Y5wPiNIiaMz/sps8+DmhaKfDm1xgj6GrH99z4gq2LQenfVQcYXmHIOBcs5qPwl7jaW3SUQWjkAPKMfQemEQZwQ==} dependencies: - '@vue/compiler-dom': 3.2.40 - '@vue/shared': 3.2.40 + '@vue/compiler-dom': 3.2.41 + '@vue/shared': 3.2.41 - /@vue/reactivity-transform/3.2.40: - resolution: {integrity: sha512-HQUCVwEaacq6fGEsg2NUuGKIhUveMCjOk8jGHqLXPI2w6zFoPrlQhwWEaINTv5kkZDXKEnCijAp+4gNEHG03yw==} + /@vue/reactivity-transform/3.2.41: + resolution: {integrity: sha512-mK5+BNMsL4hHi+IR3Ft/ho6Za+L3FA5j8WvreJ7XzHrqkPq8jtF/SMo7tuc9gHjLDwKZX1nP1JQOKo9IEAn54A==} dependencies: - '@babel/parser': 7.19.3 - '@vue/compiler-core': 3.2.40 - '@vue/shared': 3.2.40 + '@babel/parser': 7.19.4 + '@vue/compiler-core': 3.2.41 + '@vue/shared': 3.2.41 estree-walker: 2.0.2 magic-string: 0.25.9 - /@vue/reactivity/3.2.40: - resolution: {integrity: sha512-N9qgGLlZmtUBMHF9xDT4EkD9RdXde1Xbveb+niWMXuHVWQP5BzgRmE3SFyUBBcyayG4y1lhoz+lphGRRxxK4RA==} + /@vue/reactivity/3.2.41: + resolution: {integrity: sha512-9JvCnlj8uc5xRiQGZ28MKGjuCoPhhTwcoAdv3o31+cfGgonwdPNuvqAXLhlzu4zwqavFEG5tvaoINQEfxz+l6g==} dependencies: - '@vue/shared': 3.2.40 + '@vue/shared': 3.2.41 - /@vue/runtime-core/3.2.40: - resolution: {integrity: sha512-U1+rWf0H8xK8aBUZhnrN97yoZfHbjgw/bGUzfgKPJl69/mXDuSg8CbdBYBn6VVQdR947vWneQBFzdhasyzMUKg==} + /@vue/runtime-core/3.2.41: + resolution: {integrity: sha512-0LBBRwqnI0p4FgIkO9q2aJBBTKDSjzhnxrxHYengkAF6dMOjeAIZFDADAlcf2h3GDALWnblbeprYYpItiulSVQ==} dependencies: - '@vue/reactivity': 3.2.40 - '@vue/shared': 3.2.40 + '@vue/reactivity': 3.2.41 + '@vue/shared': 3.2.41 - /@vue/runtime-dom/3.2.40: - resolution: {integrity: sha512-AO2HMQ+0s2+MCec8hXAhxMgWhFhOPJ/CyRXnmTJ6XIOnJFLrH5Iq3TNwvVcODGR295jy77I6dWPj+wvFoSYaww==} + /@vue/runtime-dom/3.2.41: + resolution: {integrity: sha512-U7zYuR1NVIP8BL6jmOqmapRAHovEFp7CSw4pR2FacqewXNGqZaRfHoNLQsqQvVQ8yuZNZtxSZy0FFyC70YXPpA==} dependencies: - '@vue/runtime-core': 3.2.40 - '@vue/shared': 3.2.40 + '@vue/runtime-core': 3.2.41 + '@vue/shared': 3.2.41 csstype: 2.6.21 - /@vue/server-renderer/3.2.40_vue@3.2.40: - resolution: {integrity: sha512-gtUcpRwrXOJPJ4qyBpU3EyxQa4EkV8I4f8VrDePcGCPe4O/hd0BPS7v9OgjIQob6Ap8VDz9G+mGTKazE45/95w==} + /@vue/server-renderer/3.2.41_vue@3.2.41: + resolution: {integrity: sha512-7YHLkfJdTlsZTV0ae5sPwl9Gn/EGr2hrlbcS/8naXm2CDpnKUwC68i1wGlrYAfIgYWL7vUZwk2GkYLQH5CvFig==} peerDependencies: - vue: 3.2.40 + vue: 3.2.41 dependencies: - '@vue/compiler-ssr': 3.2.40 - '@vue/shared': 3.2.40 - vue: 3.2.40 + '@vue/compiler-ssr': 3.2.41 + '@vue/shared': 3.2.41 + vue: 3.2.41 - /@vue/shared/3.2.40: - resolution: {integrity: sha512-0PLQ6RUtZM0vO3teRfzGi4ltLUO5aO+kLgwh4Um3THSR03rpQWLTuRCkuO5A41ITzwdWeKdPHtSARuPkoo5pCQ==} + /@vue/shared/3.2.41: + resolution: {integrity: sha512-W9mfWLHmJhkfAmV+7gDjcHeAWALQtgGT3JErxULl0oz6R6+3ug91I7IErs93eCFhPCZPHBs4QJS7YWEV7A3sxw==} /abab/2.0.6: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} @@ -4994,11 +5027,11 @@ packages: /abortcontroller-polyfill/1.7.3: resolution: {integrity: sha512-zetDJxd89y3X99Kvo4qFx8GKlt6GsvN3UcRZHwU6iFA/0KiOmhkTVhe8oRoTBiTVPZu09x3vCra47+w8Yz1+2Q==} - /acorn-globals/6.0.0: - resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} + /acorn-globals/7.0.1: + resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} dependencies: - acorn: 7.4.1 - acorn-walk: 7.2.0 + acorn: 8.8.0 + acorn-walk: 8.2.0 dev: true /acorn-jsx/5.3.2_acorn@8.8.0: @@ -5020,6 +5053,11 @@ packages: resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} engines: {node: '>=0.4.0'} + /acorn-walk/8.2.0: + resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} + engines: {node: '>=0.4.0'} + dev: true + /acorn/7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} @@ -5092,8 +5130,8 @@ packages: engines: {node: '>=12'} dev: false - /antd/4.23.4_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-2VdDSPXEjCc2m2qBgv6DKpKnsKIGyQtJBdcGn223EqHxDWHqCaRxeJIA9bcW50ntHFkwdeBa+IeWLBor377dkA==} + /antd/4.23.6_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-AYH57cWBDe1ChtbnvG8i9dpKG4WnjE3AG0zIKpXByFNnxsr4saV6/19ihE8/ImSGpohN4E2zTXmo7R5/MyVRKQ==} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' @@ -5101,7 +5139,7 @@ packages: '@ant-design/colors': 6.0.0 '@ant-design/icons': 4.7.0_biqbaboplfbrettd7655fr4n2y '@ant-design/react-slick': 0.29.2_react@18.2.0 - '@babel/runtime': 7.19.0 + '@babel/runtime': 7.19.4 '@ctrl/tinycolor': 3.4.1 classnames: 2.3.2 copy-to-clipboard: 3.3.2 @@ -5118,12 +5156,12 @@ packages: rc-image: 5.7.1_biqbaboplfbrettd7655fr4n2y rc-input: 0.1.2_biqbaboplfbrettd7655fr4n2y rc-input-number: 7.3.9_biqbaboplfbrettd7655fr4n2y - rc-mentions: 1.9.2_biqbaboplfbrettd7655fr4n2y + rc-mentions: 1.10.0_biqbaboplfbrettd7655fr4n2y rc-menu: 9.6.4_biqbaboplfbrettd7655fr4n2y rc-motion: 2.6.2_biqbaboplfbrettd7655fr4n2y rc-notification: 4.6.0_biqbaboplfbrettd7655fr4n2y rc-pagination: 3.1.17_biqbaboplfbrettd7655fr4n2y - rc-picker: 2.6.10_biqbaboplfbrettd7655fr4n2y + rc-picker: 2.6.11_biqbaboplfbrettd7655fr4n2y rc-progress: 3.3.3_biqbaboplfbrettd7655fr4n2y rc-rate: 2.9.2_biqbaboplfbrettd7655fr4n2y rc-resize-observer: 1.2.0_biqbaboplfbrettd7655fr4n2y @@ -5133,8 +5171,8 @@ packages: rc-steps: 4.1.4_biqbaboplfbrettd7655fr4n2y rc-switch: 3.2.2_biqbaboplfbrettd7655fr4n2y rc-table: 7.26.0_biqbaboplfbrettd7655fr4n2y - rc-tabs: 12.1.0-alpha.1_biqbaboplfbrettd7655fr4n2y - rc-textarea: 0.3.7_biqbaboplfbrettd7655fr4n2y + rc-tabs: 12.2.1_biqbaboplfbrettd7655fr4n2y + rc-textarea: 0.4.5_biqbaboplfbrettd7655fr4n2y rc-tooltip: 5.2.2_biqbaboplfbrettd7655fr4n2y rc-tree: 5.7.0_biqbaboplfbrettd7655fr4n2y rc-tree-select: 5.5.0_biqbaboplfbrettd7655fr4n2y @@ -5210,7 +5248,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.1.4 - es-abstract: 1.20.2 + es-abstract: 1.20.4 get-intrinsic: 1.1.3 is-string: 1.0.7 dev: true @@ -5230,7 +5268,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.1.4 - es-abstract: 1.20.2 + es-abstract: 1.20.4 es-shim-unscopables: 1.0.0 dev: true @@ -5251,7 +5289,7 @@ packages: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} dev: true - /autoprefixer/10.4.12_postcss@8.4.17: + /autoprefixer/10.4.12_postcss@8.4.18: resolution: {integrity: sha512-WrCGV9/b97Pa+jtwf5UGaRjgQIg7OK3D06GnoYoZNcG1Xb8Gt3EfuKjlhh9i/VtT16g6PYjZ69jdJ2g8FxSC4Q==} engines: {node: ^10 || ^12 || >=14} hasBin: true @@ -5263,21 +5301,21 @@ packages: fraction.js: 4.2.0 normalize-range: 0.1.2 picocolors: 1.0.0 - postcss: 8.4.17 + postcss: 8.4.18 postcss-value-parser: 4.2.0 dev: true - /babel-jest/29.1.2_@babel+core@7.19.3: - resolution: {integrity: sha512-IuG+F3HTHryJb7gacC7SQ59A9kO56BctUsT67uJHp1mMCHUOMXpDwOHWGifWqdWVknN2WNkCVQELPjXx0aLJ9Q==} + /babel-jest/29.2.0_@babel+core@7.19.3: + resolution: {integrity: sha512-c8FkrW1chgcbyBqOo7jFGpQYfVnb43JqjQGV+C2r94k2rZJOukYOZ6+csAqKE4ms+PHc+yevnONxs27jQIxylw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: '@babel/core': 7.19.3 - '@jest/transform': 29.1.2 + '@jest/transform': 29.2.0 '@types/babel__core': 7.1.19 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.0.2_@babel+core@7.19.3 + babel-preset-jest: 29.2.0_@babel+core@7.19.3 chalk: 4.1.2 graceful-fs: 4.2.10 slash: 3.0.0 @@ -5292,18 +5330,18 @@ packages: '@babel/helper-plugin-utils': 7.19.0 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 - istanbul-lib-instrument: 5.2.0 + istanbul-lib-instrument: 5.2.1 test-exclude: 6.0.0 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-jest-hoist/29.0.2: - resolution: {integrity: sha512-eBr2ynAEFjcebVvu8Ktx580BD1QKCrBG1XwEUTXJe285p9HA/4hOhfWCFRQhTKSyBV0VzjhG7H91Eifz9s29hg==} + /babel-plugin-jest-hoist/29.2.0: + resolution: {integrity: sha512-TnspP2WNiR3GLfCsUNHqeXw0RoQ2f9U5hQ5L3XFpwuO8htQmSrhh8qsB6vi5Yi8+kuynN1yjDjQsPfkebmB6ZA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/template': 7.18.10 - '@babel/types': 7.19.3 + '@babel/types': 7.19.4 '@types/babel__core': 7.1.19 '@types/babel__traverse': 7.18.2 dev: true @@ -5337,14 +5375,14 @@ packages: '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.19.3 dev: true - /babel-preset-jest/29.0.2_@babel+core@7.19.3: - resolution: {integrity: sha512-BeVXp7rH5TK96ofyEnHjznjLMQ2nAeDJ+QzxKnHAAMs0RgrQsCywjAN8m4mOm5Di0pxU//3AoEeJJrerMH5UeA==} + /babel-preset-jest/29.2.0_@babel+core@7.19.3: + resolution: {integrity: sha512-z9JmMJppMxNv8N7fNRHvhMg9cvIkMxQBXgFkane3yKVEvEOP+kB50lk8DFRvF9PGqbyXxlmebKWhuDORO8RgdA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.19.3 - babel-plugin-jest-hoist: 29.0.2 + babel-plugin-jest-hoist: 29.2.0 babel-preset-current-node-syntax: 1.0.1_@babel+core@7.19.3 dev: true @@ -5417,10 +5455,6 @@ packages: dependencies: fill-range: 7.0.1 - /browser-process-hrtime/1.0.0: - resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} - dev: true - /browserslist/4.21.4: resolution: {integrity: sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -5476,13 +5510,13 @@ packages: node-gyp-build: 4.5.0 dev: false - /bundle-require/3.1.0_esbuild@0.15.10: + /bundle-require/3.1.0_esbuild@0.15.11: resolution: {integrity: sha512-IIXtAO7fKcwPHNPt9kY/WNVJqy7NDy6YqJvv6ENH0TOZoJ+yjpEsn1w40WKZbR2ibfu5g1rfgJTvmFHpm5aOMA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} peerDependencies: esbuild: '>=0.13' dependencies: - esbuild: 0.15.10 + esbuild: 0.15.11 load-tsconfig: 0.2.3 dev: true @@ -5566,8 +5600,8 @@ packages: ansi-styles: 4.3.0 supports-color: 7.2.0 - /chalk/5.1.0: - resolution: {integrity: sha512-56zD4khRTBoIyzUYAFgDDaPhUMN/fC/rySe6aZGqbj/VWiU2eI3l6ZLOtYGFZAV5v02mwPjtpzlrOveJiz5eZQ==} + /chalk/5.1.2: + resolution: {integrity: sha512-E5CkT4jWURs1Vy5qGJye+XwCkNj7Od3Af7CP6SujMetSMkLs8Do2RWJK5yx1wamHV/op8Rz+9rltjaTQWDnEFQ==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} dev: false @@ -5623,6 +5657,10 @@ packages: resolution: {integrity: sha512-t5QdPT5jq3o262DOQ8zA6E1tlH2upmUc4Hlvrbx1pGYJuiiHl7O7rvVNI+l8HTVhd/q3Qc9vqimkNk5yiXsAug==} dev: true + /ci-info/3.5.0: + resolution: {integrity: sha512-yH4RezKOGlOhxkmhbeNuC4eYZKAUsEaGtBuBzDDP1eFUKiccDWzBABxBfOx31IDwDIXMTxWuwAxUGModvkbuVw==} + dev: true + /cipher-base/1.0.4: resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} dependencies: @@ -5788,6 +5826,10 @@ packages: dependencies: safe-buffer: 5.1.2 + /convert-source-map/1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + dev: true + /copy-anything/2.0.6: resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==} dependencies: @@ -5991,8 +6033,8 @@ packages: dependencies: ms: 2.1.2 - /decimal.js/10.4.1: - resolution: {integrity: sha512-F29o+vci4DodHYT9UrR5IEbfBw9pE5eSapIJdTqXK5+6hq+t8VRxwQyKlW2i+KDKFkkJQRvFyI/QXD83h8LyQw==} + /decimal.js/10.4.2: + resolution: {integrity: sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA==} dev: true /decompress-response/6.0.0: @@ -6089,6 +6131,11 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true + /diff-sequences/29.2.0: + resolution: {integrity: sha512-413SY5JpYeSBZxmenGEmCVQ8mCgtFJF0w9PROdaS6z987XC2Pd2GOKqOITLtMftmyFZqgtCOb/QA7/Z3ZXfzIw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true + /dir-glob/3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -6124,7 +6171,7 @@ packages: /dom-helpers/5.2.1: resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} dependencies: - '@babel/runtime': 7.19.0 + '@babel/runtime': 7.19.4 csstype: 3.1.1 dev: false @@ -6243,8 +6290,8 @@ packages: dependencies: is-arrayish: 0.2.1 - /es-abstract/1.20.2: - resolution: {integrity: sha512-XxXQuVNrySBNlEkTYJoDNFe5+s2yIOpzq80sUHEdPdQr0S5nTLz4ZPPPswNIpKseDDUS5yghX1gfLIHQZ1iNuQ==} + /es-abstract/1.20.4: + resolution: {integrity: sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 @@ -6257,7 +6304,7 @@ packages: has-property-descriptors: 1.0.0 has-symbols: 1.0.3 internal-slot: 1.0.3 - is-callable: 1.2.6 + is-callable: 1.2.7 is-negative-zero: 2.0.2 is-regex: 1.1.4 is-shared-array-buffer: 1.0.2 @@ -6267,6 +6314,7 @@ packages: object-keys: 1.1.1 object.assign: 4.1.4 regexp.prototype.flags: 1.4.3 + safe-regex-test: 1.0.0 string.prototype.trimend: 1.0.5 string.prototype.trimstart: 1.0.5 unbox-primitive: 1.0.2 @@ -6282,7 +6330,7 @@ packages: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} dependencies: - is-callable: 1.2.6 + is-callable: 1.2.7 is-date-object: 1.0.5 is-symbol: 1.0.4 dev: true @@ -6316,8 +6364,8 @@ packages: ext: 1.7.0 dev: false - /esbuild-android-64/0.15.10: - resolution: {integrity: sha512-UI7krF8OYO1N7JYTgLT9ML5j4+45ra3amLZKx7LO3lmLt1Ibn8t3aZbX5Pu4BjWiqDuJ3m/hsvhPhK/5Y/YpnA==} + /esbuild-android-64/0.15.11: + resolution: {integrity: sha512-rrwoXEiuI1kaw4k475NJpexs8GfJqQUKcD08VR8sKHmuW9RUuTR2VxcupVvHdiGh9ihxL9m3lpqB1kju92Ialw==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -6325,8 +6373,8 @@ packages: dev: true optional: true - /esbuild-android-arm64/0.15.10: - resolution: {integrity: sha512-EOt55D6xBk5O05AK8brXUbZmoFj4chM8u3riGflLa6ziEoVvNjRdD7Cnp82NHQGfSHgYR06XsPI8/sMuA/cUwg==} + /esbuild-android-arm64/0.15.11: + resolution: {integrity: sha512-/hDubOg7BHOhUUsT8KUIU7GfZm5bihqssvqK5PfO4apag7YuObZRZSzViyEKcFn2tPeHx7RKbSBXvAopSHDZJQ==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -6334,8 +6382,8 @@ packages: dev: true optional: true - /esbuild-darwin-64/0.15.10: - resolution: {integrity: sha512-hbDJugTicqIm+WKZgp208d7FcXcaK8j2c0l+fqSJ3d2AzQAfjEYDRM3Z2oMeqSJ9uFxyj/muSACLdix7oTstRA==} + /esbuild-darwin-64/0.15.11: + resolution: {integrity: sha512-1DqHD0ms3AhiwkKnjRUzmiW7JnaJJr5FKrPiR7xuyMwnjDqvNWDdMq4rKSD9OC0piFNK6n0LghsglNMe2MwJtA==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -6343,8 +6391,8 @@ packages: dev: true optional: true - /esbuild-darwin-arm64/0.15.10: - resolution: {integrity: sha512-M1t5+Kj4IgSbYmunf2BB6EKLkWUq+XlqaFRiGOk8bmBapu9bCDrxjf4kUnWn59Dka3I27EiuHBKd1rSO4osLFQ==} + /esbuild-darwin-arm64/0.15.11: + resolution: {integrity: sha512-OMzhxSbS0lwwrW40HHjRCeVIJTURdXFA8c3GU30MlHKuPCcvWNUIKVucVBtNpJySXmbkQMDJdJNrXzNDyvoqvQ==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -6352,8 +6400,8 @@ packages: dev: true optional: true - /esbuild-freebsd-64/0.15.10: - resolution: {integrity: sha512-KMBFMa7C8oc97nqDdoZwtDBX7gfpolkk6Bcmj6YFMrtCMVgoU/x2DI1p74DmYl7CSS6Ppa3xgemrLrr5IjIn0w==} + /esbuild-freebsd-64/0.15.11: + resolution: {integrity: sha512-8dKP26r0/Qyez8nTCwpq60QbuYKOeBygdgOAWGCRalunyeqWRoSZj9TQjPDnTTI9joxd3QYw3UhVZTKxO9QdRg==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -6361,8 +6409,8 @@ packages: dev: true optional: true - /esbuild-freebsd-arm64/0.15.10: - resolution: {integrity: sha512-m2KNbuCX13yQqLlbSojFMHpewbn8wW5uDS6DxRpmaZKzyq8Dbsku6hHvh2U+BcLwWY4mpgXzFUoENEf7IcioGg==} + /esbuild-freebsd-arm64/0.15.11: + resolution: {integrity: sha512-aSGiODiukLGGnSg/O9+cGO2QxEacrdCtCawehkWYTt5VX1ni2b9KoxpHCT9h9Y6wGqNHmXFnB47RRJ8BIqZgmQ==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -6370,8 +6418,8 @@ packages: dev: true optional: true - /esbuild-linux-32/0.15.10: - resolution: {integrity: sha512-guXrwSYFAvNkuQ39FNeV4sNkNms1bLlA5vF1H0cazZBOLdLFIny6BhT+TUbK/hdByMQhtWQ5jI9VAmPKbVPu1w==} + /esbuild-linux-32/0.15.11: + resolution: {integrity: sha512-lsrAfdyJBGx+6aHIQmgqUonEzKYeBnyfJPkT6N2dOf1RoXYYV1BkWB6G02tjsrz1d5wZzaTc3cF+TKmuTo/ZwA==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -6379,8 +6427,8 @@ packages: dev: true optional: true - /esbuild-linux-64/0.15.10: - resolution: {integrity: sha512-jd8XfaSJeucMpD63YNMO1JCrdJhckHWcMv6O233bL4l6ogQKQOxBYSRP/XLWP+6kVTu0obXovuckJDcA0DKtQA==} + /esbuild-linux-64/0.15.11: + resolution: {integrity: sha512-Y2Rh+PcyVhQqXKBTacPCltINN3uIw2xC+dsvLANJ1SpK5NJUtxv8+rqWpjmBgaNWKQT1/uGpMmA9olALy9PLVA==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -6388,8 +6436,8 @@ packages: dev: true optional: true - /esbuild-linux-arm/0.15.10: - resolution: {integrity: sha512-6N8vThLL/Lysy9y4Ex8XoLQAlbZKUyExCWyayGi2KgTBelKpPgj6RZnUaKri0dHNPGgReJriKVU6+KDGQwn10A==} + /esbuild-linux-arm/0.15.11: + resolution: {integrity: sha512-TJllTVk5aSyqPFvvcHTvf6Wu1ZKhWpJ/qNmZO8LL/XeB+LXCclm7HQHNEIz6MT7IX8PmlC1BZYrOiw2sXSB95A==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -6397,8 +6445,8 @@ packages: dev: true optional: true - /esbuild-linux-arm64/0.15.10: - resolution: {integrity: sha512-GByBi4fgkvZFTHFDYNftu1DQ1GzR23jws0oWyCfhnI7eMOe+wgwWrc78dbNk709Ivdr/evefm2PJiUBMiusS1A==} + /esbuild-linux-arm64/0.15.11: + resolution: {integrity: sha512-uhcXiTwTmD4OpxJu3xC5TzAAw6Wzf9O1XGWL448EE9bqGjgV1j+oK3lIHAfsHnuIn8K4nDW8yjX0Sv5S++oRuw==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -6406,8 +6454,8 @@ packages: dev: true optional: true - /esbuild-linux-mips64le/0.15.10: - resolution: {integrity: sha512-BxP+LbaGVGIdQNJUNF7qpYjEGWb0YyHVSKqYKrn+pTwH/SiHUxFyJYSP3pqkku61olQiSBnSmWZ+YUpj78Tw7Q==} + /esbuild-linux-mips64le/0.15.11: + resolution: {integrity: sha512-WD61y/R1M4BLe4gxXRypoQ0Ci+Vjf714QYzcPNkiYv5I8K8WDz2ZR8Bm6cqKxd6rD+e/rZgPDbhQ9PCf7TMHmA==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -6415,8 +6463,8 @@ packages: dev: true optional: true - /esbuild-linux-ppc64le/0.15.10: - resolution: {integrity: sha512-LoSQCd6498PmninNgqd/BR7z3Bsk/mabImBWuQ4wQgmQEeanzWd5BQU2aNi9mBURCLgyheuZS6Xhrw5luw3OkQ==} + /esbuild-linux-ppc64le/0.15.11: + resolution: {integrity: sha512-JVleZS9oPVLTlBhPTWgOwxFWU/wMUdlBwTbGA4GF8c38sLbS13cupj+C8bLq929jU7EMWry4SaL+tKGIaTlqKg==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -6424,8 +6472,8 @@ packages: dev: true optional: true - /esbuild-linux-riscv64/0.15.10: - resolution: {integrity: sha512-Lrl9Cr2YROvPV4wmZ1/g48httE8z/5SCiXIyebiB5N8VT7pX3t6meI7TQVHw/wQpqP/AF4SksDuFImPTM7Z32Q==} + /esbuild-linux-riscv64/0.15.11: + resolution: {integrity: sha512-9aLIalZ2HFHIOZpmVU11sEAS9F8TnHw49daEjcgMpBXHFF57VuT9f9/9LKJhw781Gda0P9jDkuCWJ0tFbErvJw==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -6433,8 +6481,8 @@ packages: dev: true optional: true - /esbuild-linux-s390x/0.15.10: - resolution: {integrity: sha512-ReP+6q3eLVVP2lpRrvl5EodKX7EZ1bS1/z5j6hsluAlZP5aHhk6ghT6Cq3IANvvDdscMMCB4QEbI+AjtvoOFpA==} + /esbuild-linux-s390x/0.15.11: + resolution: {integrity: sha512-sZHtiXXOKsLI3XGBGoYO4qKBzJlb8xNsWmvFiwFMHFzA4AXgDP1KDp7Dawe9C2pavTRBDvl+Ok4n/DHQ59oaTg==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -6442,8 +6490,8 @@ packages: dev: true optional: true - /esbuild-netbsd-64/0.15.10: - resolution: {integrity: sha512-iGDYtJCMCqldMskQ4eIV+QSS/CuT7xyy9i2/FjpKvxAuCzrESZXiA1L64YNj6/afuzfBe9i8m/uDkFHy257hTw==} + /esbuild-netbsd-64/0.15.11: + resolution: {integrity: sha512-hUC9yN06K9sg7ju4Vgu9ChAPdsEgtcrcLfyNT5IKwKyfpLvKUwCMZSdF+gRD3WpyZelgTQfJ+pDx5XFbXTlB0A==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -6451,8 +6499,8 @@ packages: dev: true optional: true - /esbuild-openbsd-64/0.15.10: - resolution: {integrity: sha512-ftMMIwHWrnrYnvuJQRJs/Smlcb28F9ICGde/P3FUTCgDDM0N7WA0o9uOR38f5Xe2/OhNCgkjNeb7QeaE3cyWkQ==} + /esbuild-openbsd-64/0.15.11: + resolution: {integrity: sha512-0bBo9SQR4t66Wd91LGMAqmWorzO0TTzVjYiifwoFtel8luFeXuPThQnEm5ztN4g0fnvcp7AnUPPzS/Depf17wQ==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -6460,8 +6508,8 @@ packages: dev: true optional: true - /esbuild-sunos-64/0.15.10: - resolution: {integrity: sha512-mf7hBL9Uo2gcy2r3rUFMjVpTaGpFJJE5QTDDqUFf1632FxteYANffDZmKbqX0PfeQ2XjUDE604IcE7OJeoHiyg==} + /esbuild-sunos-64/0.15.11: + resolution: {integrity: sha512-EuBdTGlsMTjEl1sQnBX2jfygy7iR6CKfvOzi+gEOfhDqbHXsmY1dcpbVtcwHAg9/2yUZSfMJHMAgf1z8M4yyyw==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -6469,8 +6517,8 @@ packages: dev: true optional: true - /esbuild-windows-32/0.15.10: - resolution: {integrity: sha512-ttFVo+Cg8b5+qHmZHbEc8Vl17kCleHhLzgT8X04y8zudEApo0PxPg9Mz8Z2cKH1bCYlve1XL8LkyXGFjtUYeGg==} + /esbuild-windows-32/0.15.11: + resolution: {integrity: sha512-O0/Wo1Wk6dc0rZSxkvGpmTNIycEznHmkObTFz2VHBhjPsO4ZpCgfGxNkCpz4AdAIeMczpTXt/8d5vdJNKEGC+Q==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -6478,8 +6526,8 @@ packages: dev: true optional: true - /esbuild-windows-64/0.15.10: - resolution: {integrity: sha512-2H0gdsyHi5x+8lbng3hLbxDWR7mKHWh5BXZGKVG830KUmXOOWFE2YKJ4tHRkejRduOGDrBvHBriYsGtmTv3ntA==} + /esbuild-windows-64/0.15.11: + resolution: {integrity: sha512-x977Q4HhNjnHx00b4XLAnTtj5vfbdEvkxaQwC1Zh5AN8g5EX+izgZ6e5QgqJgpzyRNJqh4hkgIJF1pyy1be0mQ==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -6487,8 +6535,8 @@ packages: dev: true optional: true - /esbuild-windows-arm64/0.15.10: - resolution: {integrity: sha512-S+th4F+F8VLsHLR0zrUcG+Et4hx0RKgK1eyHc08kztmLOES8BWwMiaGdoW9hiXuzznXQ0I/Fg904MNbr11Nktw==} + /esbuild-windows-arm64/0.15.11: + resolution: {integrity: sha512-VwUHFACuBahrvntdcMKZteUZ9HaYrBRODoKe4tIWxguQRvvYoYb7iu5LrcRS/FQx8KPZNaa72zuqwVtHeXsITw==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -6496,34 +6544,34 @@ packages: dev: true optional: true - /esbuild/0.15.10: - resolution: {integrity: sha512-N7wBhfJ/E5fzn/SpNgX+oW2RLRjwaL8Y0ezqNqhjD6w0H2p0rDuEz2FKZqpqLnO8DCaWumKe8dsC/ljvVSSxng==} + /esbuild/0.15.11: + resolution: {integrity: sha512-OgHGuhlfZ//mToxjte1D5iiiQgWfJ2GByVMwEC/IuoXsBGkuyK1+KrjYu0laSpnN/L1UmLUCv0s25vObdc1bVg==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': 0.15.10 - '@esbuild/linux-loong64': 0.15.10 - esbuild-android-64: 0.15.10 - esbuild-android-arm64: 0.15.10 - esbuild-darwin-64: 0.15.10 - esbuild-darwin-arm64: 0.15.10 - esbuild-freebsd-64: 0.15.10 - esbuild-freebsd-arm64: 0.15.10 - esbuild-linux-32: 0.15.10 - esbuild-linux-64: 0.15.10 - esbuild-linux-arm: 0.15.10 - esbuild-linux-arm64: 0.15.10 - esbuild-linux-mips64le: 0.15.10 - esbuild-linux-ppc64le: 0.15.10 - esbuild-linux-riscv64: 0.15.10 - esbuild-linux-s390x: 0.15.10 - esbuild-netbsd-64: 0.15.10 - esbuild-openbsd-64: 0.15.10 - esbuild-sunos-64: 0.15.10 - esbuild-windows-32: 0.15.10 - esbuild-windows-64: 0.15.10 - esbuild-windows-arm64: 0.15.10 + '@esbuild/android-arm': 0.15.11 + '@esbuild/linux-loong64': 0.15.11 + esbuild-android-64: 0.15.11 + esbuild-android-arm64: 0.15.11 + esbuild-darwin-64: 0.15.11 + esbuild-darwin-arm64: 0.15.11 + esbuild-freebsd-64: 0.15.11 + esbuild-freebsd-arm64: 0.15.11 + esbuild-linux-32: 0.15.11 + esbuild-linux-64: 0.15.11 + esbuild-linux-arm: 0.15.11 + esbuild-linux-arm64: 0.15.11 + esbuild-linux-mips64le: 0.15.11 + esbuild-linux-ppc64le: 0.15.11 + esbuild-linux-riscv64: 0.15.11 + esbuild-linux-s390x: 0.15.11 + esbuild-netbsd-64: 0.15.11 + esbuild-openbsd-64: 0.15.11 + esbuild-sunos-64: 0.15.11 + esbuild-windows-32: 0.15.11 + esbuild-windows-64: 0.15.11 + esbuild-windows-arm64: 0.15.11 dev: true /escalade/3.1.1: @@ -6570,8 +6618,8 @@ packages: eslint: 8.25.0 dev: true - /eslint-plugin-react/7.31.8_eslint@8.25.0: - resolution: {integrity: sha512-5lBTZmgQmARLLSYiwI71tiGVTLUuqXantZM6vlSY39OaDSV0M7+32K5DnLkmFrwTe+Ksz0ffuLUC91RUviVZfw==} + /eslint-plugin-react/7.31.10_eslint@8.25.0: + resolution: {integrity: sha512-e4N/nc6AAlg4UKW/mXeYWd3R++qUano5/o+t+wnWxIf+bLsOaH3a4q74kX3nDjYym3VBN4HyO9nEn1GcAqgQOA==} engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 @@ -6747,7 +6795,18 @@ packages: jest-get-type: 29.0.0 jest-matcher-utils: 29.1.2 jest-message-util: 29.1.2 - jest-util: 29.1.2 + jest-util: 29.2.0 + dev: true + + /expect/29.2.0: + resolution: {integrity: sha512-03ClF3GWwUqd9Grgkr9ZSdaCJGMRA69PQ8jT7o+Bx100VlGiAFf9/8oIm9Qve7ZVJhuJxFftqFhviZJRxxNfvg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/expect-utils': 29.2.0 + jest-get-type: 29.2.0 + jest-matcher-utils: 29.2.0 + jest-message-util: 29.2.0 + jest-util: 29.2.0 dev: true /ext/1.7.0: @@ -6869,35 +6928,35 @@ packages: path-exists: 4.0.0 dev: true - /firebase/9.11.0: - resolution: {integrity: sha512-AOPj3FmpweMulG3A1901hOhbCoW22IHQuRfst0Tew9Xc8Ldq75uILu0MnmCYdMVGitF7uTFVOFeyhWyGvMxpKw==} + /firebase/9.12.1: + resolution: {integrity: sha512-sBp4rvkCC7TUnGeneRNs6GVcajO+iSXmYjxqXN4FsrBzldJ5/AOnDXf4bi9OUZtQSl+EHDgUWShBieht15ijgQ==} dependencies: - '@firebase/analytics': 0.8.1_@firebase+app@0.8.0 - '@firebase/analytics-compat': 0.1.14_67sdrriteebqftxaivs76j2npy - '@firebase/app': 0.8.0 - '@firebase/app-check': 0.5.13_@firebase+app@0.8.0 - '@firebase/app-check-compat': 0.2.13_67sdrriteebqftxaivs76j2npy - '@firebase/app-compat': 0.1.35 + '@firebase/analytics': 0.8.3_@firebase+app@0.8.2 + '@firebase/analytics-compat': 0.1.16_ccgnan4cdumznqsqrm66k6tw4a + '@firebase/app': 0.8.2 + '@firebase/app-check': 0.5.15_@firebase+app@0.8.2 + '@firebase/app-check-compat': 0.2.15_ccgnan4cdumznqsqrm66k6tw4a + '@firebase/app-compat': 0.1.37 '@firebase/app-types': 0.8.0 - '@firebase/auth': 0.20.8_@firebase+app@0.8.0 - '@firebase/auth-compat': 0.2.21_beyrw73ss46ah3z6mhsogcbbku - '@firebase/database': 0.13.7_@firebase+app-types@0.8.0 - '@firebase/database-compat': 0.2.7_@firebase+app-types@0.8.0 - '@firebase/firestore': 3.6.0_@firebase+app@0.8.0 - '@firebase/firestore-compat': 0.1.26_beyrw73ss46ah3z6mhsogcbbku - '@firebase/functions': 0.8.5_unghsxa6g7m74ehr6clzqt6wey - '@firebase/functions-compat': 0.2.5_beyrw73ss46ah3z6mhsogcbbku - '@firebase/installations': 0.5.13_@firebase+app@0.8.0 - '@firebase/installations-compat': 0.1.13_beyrw73ss46ah3z6mhsogcbbku - '@firebase/messaging': 0.9.17_@firebase+app@0.8.0 - '@firebase/messaging-compat': 0.1.17_67sdrriteebqftxaivs76j2npy - '@firebase/performance': 0.5.13_@firebase+app@0.8.0 - '@firebase/performance-compat': 0.1.13_67sdrriteebqftxaivs76j2npy - '@firebase/remote-config': 0.3.12_@firebase+app@0.8.0 - '@firebase/remote-config-compat': 0.1.13_67sdrriteebqftxaivs76j2npy - '@firebase/storage': 0.9.10_@firebase+app@0.8.0 - '@firebase/storage-compat': 0.1.18_beyrw73ss46ah3z6mhsogcbbku - '@firebase/util': 1.7.0 + '@firebase/auth': 0.20.10_@firebase+app@0.8.2 + '@firebase/auth-compat': 0.2.23_i2ahgvjm4wg2xeccojmmxawjhq + '@firebase/database': 0.13.9_@firebase+app-types@0.8.0 + '@firebase/database-compat': 0.2.9_@firebase+app-types@0.8.0 + '@firebase/firestore': 3.7.1_@firebase+app@0.8.2 + '@firebase/firestore-compat': 0.2.1_i2ahgvjm4wg2xeccojmmxawjhq + '@firebase/functions': 0.8.7_xtqa4wflugpy4cokvoiqqfajxe + '@firebase/functions-compat': 0.2.7_i2ahgvjm4wg2xeccojmmxawjhq + '@firebase/installations': 0.5.15_@firebase+app@0.8.2 + '@firebase/installations-compat': 0.1.15_i2ahgvjm4wg2xeccojmmxawjhq + '@firebase/messaging': 0.9.19_@firebase+app@0.8.2 + '@firebase/messaging-compat': 0.1.19_ccgnan4cdumznqsqrm66k6tw4a + '@firebase/performance': 0.5.15_@firebase+app@0.8.2 + '@firebase/performance-compat': 0.1.15_ccgnan4cdumznqsqrm66k6tw4a + '@firebase/remote-config': 0.3.14_@firebase+app@0.8.2 + '@firebase/remote-config-compat': 0.1.15_ccgnan4cdumznqsqrm66k6tw4a + '@firebase/storage': 0.9.12_@firebase+app@0.8.2 + '@firebase/storage-compat': 0.1.20_i2ahgvjm4wg2xeccojmmxawjhq + '@firebase/util': 1.7.2 transitivePeerDependencies: - bufferutil - encoding @@ -6916,8 +6975,8 @@ packages: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} dev: true - /form-data-encoder/2.1.2: - resolution: {integrity: sha512-FCaIOVTRA9E0siY6FeXid7D5yrCqpsErplUkE2a1BEiKj1BE9z6FbKB4ntDTwC4NVLie9p+4E9nX4mWwEOT05A==} + /form-data-encoder/2.1.3: + resolution: {integrity: sha512-KqU0nnPMgIJcCOFTNJFEA8epcseEaoox4XZffTgy8jlI6pL/5EFyR54NRG7CnCJN0biY7q52DO3MH6/sJ/TKlQ==} engines: {node: '>= 14.17'} dev: false @@ -6966,7 +7025,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.1.4 - es-abstract: 1.20.2 + es-abstract: 1.20.4 functions-have-names: 1.2.3 dev: true @@ -7137,8 +7196,8 @@ packages: node-forge: 1.3.1 dev: false - /got/12.5.1: - resolution: {integrity: sha512-sD16AK8cCyUoPtKr/NMvLTFFa+T3i3S+zoiuvhq0HP2YiqBZA9AtlBjAdsQBsLBK7slPuvmfE0OxhGi7N5dD4w==} + /got/12.5.2: + resolution: {integrity: sha512-guHGMSEcsA5m1oPRweXUJnug0vuvlkX9wx5hzOka+ZBrBUOJHU0Z1JcNu3QE5IPGnA5aXUsQHdWOD4eJg9/v3A==} engines: {node: '>=14.16'} dependencies: '@sindresorhus/is': 5.3.0 @@ -7146,7 +7205,7 @@ packages: cacheable-lookup: 7.0.0 cacheable-request: 10.2.1 decompress-response: 6.0.0 - form-data-encoder: 2.1.2 + form-data-encoder: 2.1.3 get-stream: 6.0.1 http2-wrapper: 2.1.11 lowercase-keys: 3.0.0 @@ -7426,7 +7485,7 @@ packages: engines: {node: '>=12.0.0'} dependencies: ansi-escapes: 5.0.0 - chalk: 5.1.0 + chalk: 5.1.2 cli-cursor: 4.0.0 cli-width: 4.0.0 external-editor: 3.1.0 @@ -7478,8 +7537,8 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-callable/1.2.6: - resolution: {integrity: sha512-krO72EO2NptOGAX2KYyqbP9vYMlNAXdB53rq6f8LXY6RY7JdSR/3BD6wLUlPHSAesmY9vstNrjvqGaCiRK/91Q==} + /is-callable/1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} dev: true @@ -7633,12 +7692,12 @@ packages: engines: {node: '>=8'} dev: true - /istanbul-lib-instrument/5.2.0: - resolution: {integrity: sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==} + /istanbul-lib-instrument/5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} dependencies: '@babel/core': 7.19.3 - '@babel/parser': 7.19.3 + '@babel/parser': 7.19.4 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 semver: 6.3.0 @@ -7678,43 +7737,43 @@ packages: resolution: {integrity: sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==} dev: false - /jest-changed-files/29.0.0: - resolution: {integrity: sha512-28/iDMDrUpGoCitTURuDqUzWQoWmOmOKOFST1mi2lwh62X4BFf6khgH3uSuo1e49X/UDjuApAj3w0wLOex4VPQ==} + /jest-changed-files/29.2.0: + resolution: {integrity: sha512-qPVmLLyBmvF5HJrY7krDisx6Voi8DmlV3GZYX0aFNbaQsZeoz1hfxcCMbqDGuQCxU1dJy9eYc2xscE8QrCCYaA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: execa: 5.1.1 p-limit: 3.1.0 dev: true - /jest-circus/29.1.2: - resolution: {integrity: sha512-ajQOdxY6mT9GtnfJRZBRYS7toNIJayiiyjDyoZcnvPRUPwJ58JX0ci0PKAKUo2C1RyzlHw0jabjLGKksO42JGA==} + /jest-circus/29.2.0: + resolution: {integrity: sha512-bpJRMe+VtvYlF3q8JNx+/cAo4FYvNCiR5s7Z0Scf8aC+KJ2ineSjZKtw1cIZbythlplkiro0My8nc65pfCqJ3A==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.1.2 - '@jest/expect': 29.1.2 - '@jest/test-result': 29.1.2 - '@jest/types': 29.1.2 - '@types/node': 18.8.3 + '@jest/environment': 29.2.0 + '@jest/expect': 29.2.0 + '@jest/test-result': 29.2.0 + '@jest/types': 29.2.0 + '@types/node': 18.11.0 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 is-generator-fn: 2.1.0 - jest-each: 29.1.2 - jest-matcher-utils: 29.1.2 - jest-message-util: 29.1.2 - jest-runtime: 29.1.2 - jest-snapshot: 29.1.2 - jest-util: 29.1.2 + jest-each: 29.2.0 + jest-matcher-utils: 29.2.0 + jest-message-util: 29.2.0 + jest-runtime: 29.2.0 + jest-snapshot: 29.2.0 + jest-util: 29.2.0 p-limit: 3.1.0 - pretty-format: 29.1.2 + pretty-format: 29.2.0 slash: 3.0.0 stack-utils: 2.0.5 transitivePeerDependencies: - supports-color dev: true - /jest-cli/29.1.2_@types+node@18.8.3: - resolution: {integrity: sha512-vsvBfQ7oS2o4MJdAH+4u9z76Vw5Q8WBQF5MchDbkylNknZdrPTX1Ix7YRJyTlOWqRaS7ue/cEAn+E4V1MWyMzw==} + /jest-cli/29.2.0_@types+node@18.11.0: + resolution: {integrity: sha512-/581TzbXeO+5kbtSlhXEthGiVJCC8AP0jgT0iZINAAMW+tTFj2uWU7z+HNUH5yIYdHV7AvRr0fWLrmHJGIruHg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true peerDependencies: @@ -7723,16 +7782,16 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.1.2 - '@jest/test-result': 29.1.2 - '@jest/types': 29.1.2 + '@jest/core': 29.2.0 + '@jest/test-result': 29.2.0 + '@jest/types': 29.2.0 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.10 import-local: 3.1.0 - jest-config: 29.1.2_@types+node@18.8.3 - jest-util: 29.1.2 - jest-validate: 29.1.2 + jest-config: 29.2.0_@types+node@18.11.0 + jest-util: 29.2.0 + jest-validate: 29.2.0 prompts: 2.4.2 yargs: 17.6.0 transitivePeerDependencies: @@ -7741,8 +7800,8 @@ packages: - ts-node dev: true - /jest-config/29.1.2_@types+node@18.8.3: - resolution: {integrity: sha512-EC3Zi86HJUOz+2YWQcJYQXlf0zuBhJoeyxLM6vb6qJsVmpP7KcCP1JnyF0iaqTaXdBP8Rlwsvs7hnKWQWWLwwA==} + /jest-config/29.2.0_@types+node@18.11.0: + resolution: {integrity: sha512-IkdCsrHIoxDPZAyFcdtQrCQ3uftLqns6Joj0tlbxiAQW4k/zTXmIygqWBmPNxO9FbFkDrhtYZiLHXjaJh9rS+Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@types/node': '*' @@ -7754,26 +7813,26 @@ packages: optional: true dependencies: '@babel/core': 7.19.3 - '@jest/test-sequencer': 29.1.2 - '@jest/types': 29.1.2 - '@types/node': 18.8.3 - babel-jest: 29.1.2_@babel+core@7.19.3 + '@jest/test-sequencer': 29.2.0 + '@jest/types': 29.2.0 + '@types/node': 18.11.0 + babel-jest: 29.2.0_@babel+core@7.19.3 chalk: 4.1.2 - ci-info: 3.4.0 + ci-info: 3.5.0 deepmerge: 4.2.2 glob: 7.2.3 graceful-fs: 4.2.10 - jest-circus: 29.1.2 - jest-environment-node: 29.1.2 - jest-get-type: 29.0.0 - jest-regex-util: 29.0.0 - jest-resolve: 29.1.2 - jest-runner: 29.1.2 - jest-util: 29.1.2 - jest-validate: 29.1.2 + jest-circus: 29.2.0 + jest-environment-node: 29.2.0 + jest-get-type: 29.2.0 + jest-regex-util: 29.2.0 + jest-resolve: 29.2.0 + jest-runner: 29.2.0 + jest-util: 29.2.0 + jest-validate: 29.2.0 micromatch: 4.0.5 parse-json: 5.2.0 - pretty-format: 29.1.2 + pretty-format: 29.2.0 slash: 3.0.0 strip-json-comments: 3.1.1 transitivePeerDependencies: @@ -7790,53 +7849,67 @@ packages: pretty-format: 29.1.2 dev: true - /jest-docblock/29.0.0: - resolution: {integrity: sha512-s5Kpra/kLzbqu9dEjov30kj1n4tfu3e7Pl8v+f8jOkeWNqM6Ds8jRaJfZow3ducoQUrf2Z4rs2N5S3zXnb83gw==} + /jest-diff/29.2.0: + resolution: {integrity: sha512-GsH07qQL+/D/GxlnU+sSg9GL3fBOcuTlmtr3qr2pnkiODCwubNN2/7slW4m3CvxDsEus/VEOfQKRFLyXsUlnZw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + chalk: 4.1.2 + diff-sequences: 29.2.0 + jest-get-type: 29.2.0 + pretty-format: 29.2.0 + dev: true + + /jest-docblock/29.2.0: + resolution: {integrity: sha512-bkxUsxTgWQGbXV5IENmfiIuqZhJcyvF7tU4zJ/7ioTutdz4ToB5Yx6JOFBpgI+TphRY4lhOyCWGNH/QFQh5T6A==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: detect-newline: 3.1.0 dev: true - /jest-each/29.1.2: - resolution: {integrity: sha512-AmTQp9b2etNeEwMyr4jc0Ql/LIX/dhbgP21gHAizya2X6rUspHn2gysMXaj6iwWuOJ2sYRgP8c1P4cXswgvS1A==} + /jest-each/29.2.0: + resolution: {integrity: sha512-h4LeC3L/R7jIMfTdYowevPIssvcPYQ7Qzs+pCSYsJgPztIizXwKmnfhZXBA4WVqdmvMcpmseYEXb67JT7IJ2eg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.1.2 + '@jest/types': 29.2.0 chalk: 4.1.2 - jest-get-type: 29.0.0 - jest-util: 29.1.2 - pretty-format: 29.1.2 + jest-get-type: 29.2.0 + jest-util: 29.2.0 + pretty-format: 29.2.0 dev: true - /jest-environment-jsdom/29.1.2: - resolution: {integrity: sha512-D+XNIKia5+uDjSMwL/G1l6N9MCb7LymKI8FpcLo7kkISjc/Sa9w+dXXEa7u1Wijo3f8sVLqfxdGqYtRhmca+Xw==} + /jest-environment-jsdom/29.2.0: + resolution: {integrity: sha512-DgHbBxC4RmHpDLFLMt00NjXXimGvtNALRyxQYOo3e6vwq1qsIDqXsEZiuEpjTg0BueENE1mx8BKFKHXArEdRQQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true dependencies: - '@jest/environment': 29.1.2 - '@jest/fake-timers': 29.1.2 - '@jest/types': 29.1.2 + '@jest/environment': 29.2.0 + '@jest/fake-timers': 29.2.0 + '@jest/types': 29.2.0 '@types/jsdom': 20.0.0 - '@types/node': 18.8.3 - jest-mock: 29.1.2 - jest-util: 29.1.2 - jsdom: 20.0.0 + '@types/node': 18.11.0 + jest-mock: 29.2.0 + jest-util: 29.2.0 + jsdom: 20.0.1 transitivePeerDependencies: - bufferutil - - canvas - supports-color - utf-8-validate dev: true - /jest-environment-node/29.1.2: - resolution: {integrity: sha512-C59yVbdpY8682u6k/lh8SUMDJPbOyCHOTgLVVi1USWFxtNV+J8fyIwzkg+RJIVI30EKhKiAGNxYaFr3z6eyNhQ==} + /jest-environment-node/29.2.0: + resolution: {integrity: sha512-b4qQGVStPMvtZG97Ac0rvnmSIjCZturFU7MQRMp4JDFl7zoaDLTtXmFjFP1tNmi9te6kR8d+Htbv3nYeoaIz6g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.1.2 - '@jest/fake-timers': 29.1.2 - '@jest/types': 29.1.2 - '@types/node': 18.8.3 - jest-mock: 29.1.2 - jest-util: 29.1.2 + '@jest/environment': 29.2.0 + '@jest/fake-timers': 29.2.0 + '@jest/types': 29.2.0 + '@types/node': 18.11.0 + jest-mock: 29.2.0 + jest-util: 29.2.0 dev: true /jest-get-type/29.0.0: @@ -7844,31 +7917,36 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true - /jest-haste-map/29.1.2: - resolution: {integrity: sha512-xSjbY8/BF11Jh3hGSPfYTa/qBFrm3TPM7WU8pU93m2gqzORVLkHFWvuZmFsTEBPRKndfewXhMOuzJNHyJIZGsw==} + /jest-get-type/29.2.0: + resolution: {integrity: sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true + + /jest-haste-map/29.2.0: + resolution: {integrity: sha512-qu9lGFi7qJ8v37egS1phZZUJYiMyWnKwu83NlNT1qs50TbedIX2hFl+9ztsJ7U/ENaHwk1/Bs8fqOIQsScIRwg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.1.2 + '@jest/types': 29.2.0 '@types/graceful-fs': 4.1.5 - '@types/node': 18.8.3 + '@types/node': 18.11.0 anymatch: 3.1.2 fb-watchman: 2.0.2 graceful-fs: 4.2.10 - jest-regex-util: 29.0.0 - jest-util: 29.1.2 - jest-worker: 29.1.2 + jest-regex-util: 29.2.0 + jest-util: 29.2.0 + jest-worker: 29.2.0 micromatch: 4.0.5 walker: 1.0.8 optionalDependencies: fsevents: 2.3.2 dev: true - /jest-leak-detector/29.1.2: - resolution: {integrity: sha512-TG5gAZJpgmZtjb6oWxBLf2N6CfQ73iwCe6cofu/Uqv9iiAm6g502CAnGtxQaTfpHECBdVEMRBhomSXeLnoKjiQ==} + /jest-leak-detector/29.2.0: + resolution: {integrity: sha512-FXT9sCFdct42+oOqGIr/9kmUw3RbhvpkwidCBT5ySHHoWNGd3c9n7HXpFKjEz9UnUITRCGdn0q2s6Sxrq36kwg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - jest-get-type: 29.0.0 - pretty-format: 29.1.2 + jest-get-type: 29.2.0 + pretty-format: 29.2.0 dev: true /jest-matcher-utils/29.1.2: @@ -7881,12 +7959,22 @@ packages: pretty-format: 29.1.2 dev: true + /jest-matcher-utils/29.2.0: + resolution: {integrity: sha512-FcEfKZ4vm28yCdBsvC69EkrEhcfex+IYlRctNJXsRG9+WC3WxgBNORnECIgqUtj7o/h1d8o7xB/dFUiLi4bqtw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + chalk: 4.1.2 + jest-diff: 29.2.0 + jest-get-type: 29.2.0 + pretty-format: 29.2.0 + dev: true + /jest-message-util/29.1.2: resolution: {integrity: sha512-9oJ2Os+Qh6IlxLpmvshVbGUiSkZVc2FK+uGOm6tghafnB2RyjKAxMZhtxThRMxfX1J1SOMhTn9oK3/MutRWQJQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/code-frame': 7.18.6 - '@jest/types': 29.1.2 + '@jest/types': 29.2.0 '@types/stack-utils': 2.0.1 chalk: 4.1.2 graceful-fs: 4.2.10 @@ -7896,16 +7984,31 @@ packages: stack-utils: 2.0.5 dev: true - /jest-mock/29.1.2: - resolution: {integrity: sha512-PFDAdjjWbjPUtQPkQufvniXIS3N9Tv7tbibePEjIIprzjgo0qQlyUiVMrT4vL8FaSJo1QXifQUOuPH3HQC/aMA==} + /jest-message-util/29.2.0: + resolution: {integrity: sha512-arBfk5yMFMTnMB22GyG601xGSGthA02vWSewPaxoFo0F9wBqDOyxccPbCcYu8uibw3kduSHXdCOd1PsLSgdomg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.1.2 - '@types/node': 18.8.3 - jest-util: 29.1.2 + '@babel/code-frame': 7.18.6 + '@jest/types': 29.2.0 + '@types/stack-utils': 2.0.1 + chalk: 4.1.2 + graceful-fs: 4.2.10 + micromatch: 4.0.5 + pretty-format: 29.2.0 + slash: 3.0.0 + stack-utils: 2.0.5 dev: true - /jest-pnp-resolver/1.2.2_jest-resolve@29.1.2: + /jest-mock/29.2.0: + resolution: {integrity: sha512-aiWGR0P8ivssIO17xkehLGFtCcef2ZwQFNPwEer1jQLHxPctDlIg3Hs6QMq1KpPz5dkCcgM7mwGif4a9IPznlg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.2.0 + '@types/node': 18.11.0 + jest-util: 29.2.0 + dev: true + + /jest-pnp-resolver/1.2.2_jest-resolve@29.2.0: resolution: {integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==} engines: {node: '>=6'} peerDependencies: @@ -7914,125 +8017,125 @@ packages: jest-resolve: optional: true dependencies: - jest-resolve: 29.1.2 + jest-resolve: 29.2.0 dev: true - /jest-regex-util/29.0.0: - resolution: {integrity: sha512-BV7VW7Sy0fInHWN93MMPtlClweYv2qrSCwfeFWmpribGZtQPWNvRSq9XOVgOEjU1iBGRKXUZil0o2AH7Iy9Lug==} + /jest-regex-util/29.2.0: + resolution: {integrity: sha512-6yXn0kg2JXzH30cr2NlThF+70iuO/3irbaB4mh5WyqNIvLLP+B6sFdluO1/1RJmslyh/f9osnefECflHvTbwVA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true - /jest-resolve-dependencies/29.1.2: - resolution: {integrity: sha512-44yYi+yHqNmH3OoWZvPgmeeiwKxhKV/0CfrzaKLSkZG9gT973PX8i+m8j6pDrTYhhHoiKfF3YUFg/6AeuHw4HQ==} + /jest-resolve-dependencies/29.2.0: + resolution: {integrity: sha512-Cd0Z39sDntEnfR9PoUdFHUAGDvtKI0/7Wt73l3lt03A3yQ+A6Qi3XmBuqGjdFl2QbXaPa937oLhilG612P8HGQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - jest-regex-util: 29.0.0 - jest-snapshot: 29.1.2 + jest-regex-util: 29.2.0 + jest-snapshot: 29.2.0 transitivePeerDependencies: - supports-color dev: true - /jest-resolve/29.1.2: - resolution: {integrity: sha512-7fcOr+k7UYSVRJYhSmJHIid3AnDBcLQX3VmT9OSbPWsWz1MfT7bcoerMhADKGvKCoMpOHUQaDHtQoNp/P9JMGg==} + /jest-resolve/29.2.0: + resolution: {integrity: sha512-f5c0ljNg2guDBCC7wi92vAhNuA0BtAG5vkY7Fob0c7sUMU1g87mTXqRmjrVFe2XvdwP5m5T/e5KJsCKu9hRvBA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 graceful-fs: 4.2.10 - jest-haste-map: 29.1.2 - jest-pnp-resolver: 1.2.2_jest-resolve@29.1.2 - jest-util: 29.1.2 - jest-validate: 29.1.2 + jest-haste-map: 29.2.0 + jest-pnp-resolver: 1.2.2_jest-resolve@29.2.0 + jest-util: 29.2.0 + jest-validate: 29.2.0 resolve: 1.22.1 resolve.exports: 1.1.0 slash: 3.0.0 dev: true - /jest-runner/29.1.2: - resolution: {integrity: sha512-yy3LEWw8KuBCmg7sCGDIqKwJlULBuNIQa2eFSVgVASWdXbMYZ9H/X0tnXt70XFoGf92W2sOQDOIFAA6f2BG04Q==} + /jest-runner/29.2.0: + resolution: {integrity: sha512-VPBrCwl9fM2mc5yk6yZhNrgXzRJMD5jfLmntkMLlrVq4hQPWbRK998iJlR+DOGCO04TC9PPYLntOJ001Vnf28g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/console': 29.1.2 - '@jest/environment': 29.1.2 - '@jest/test-result': 29.1.2 - '@jest/transform': 29.1.2 - '@jest/types': 29.1.2 - '@types/node': 18.8.3 + '@jest/console': 29.2.0 + '@jest/environment': 29.2.0 + '@jest/test-result': 29.2.0 + '@jest/transform': 29.2.0 + '@jest/types': 29.2.0 + '@types/node': 18.11.0 chalk: 4.1.2 emittery: 0.10.2 graceful-fs: 4.2.10 - jest-docblock: 29.0.0 - jest-environment-node: 29.1.2 - jest-haste-map: 29.1.2 - jest-leak-detector: 29.1.2 - jest-message-util: 29.1.2 - jest-resolve: 29.1.2 - jest-runtime: 29.1.2 - jest-util: 29.1.2 - jest-watcher: 29.1.2 - jest-worker: 29.1.2 + jest-docblock: 29.2.0 + jest-environment-node: 29.2.0 + jest-haste-map: 29.2.0 + jest-leak-detector: 29.2.0 + jest-message-util: 29.2.0 + jest-resolve: 29.2.0 + jest-runtime: 29.2.0 + jest-util: 29.2.0 + jest-watcher: 29.2.0 + jest-worker: 29.2.0 p-limit: 3.1.0 source-map-support: 0.5.13 transitivePeerDependencies: - supports-color dev: true - /jest-runtime/29.1.2: - resolution: {integrity: sha512-jr8VJLIf+cYc+8hbrpt412n5jX3tiXmpPSYTGnwcvNemY+EOuLNiYnHJ3Kp25rkaAcTWOEI4ZdOIQcwYcXIAZw==} + /jest-runtime/29.2.0: + resolution: {integrity: sha512-+GDmzCrswQF+mvI0upTYMe/OPYnlRRNLLDHM9AFLp2y7zxWoDoYgb8DL3WwJ8d9m743AzrnvBV9JQHi/0ed7dg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 29.1.2 - '@jest/fake-timers': 29.1.2 - '@jest/globals': 29.1.2 - '@jest/source-map': 29.0.0 - '@jest/test-result': 29.1.2 - '@jest/transform': 29.1.2 - '@jest/types': 29.1.2 - '@types/node': 18.8.3 + '@jest/environment': 29.2.0 + '@jest/fake-timers': 29.2.0 + '@jest/globals': 29.2.0 + '@jest/source-map': 29.2.0 + '@jest/test-result': 29.2.0 + '@jest/transform': 29.2.0 + '@jest/types': 29.2.0 + '@types/node': 18.11.0 chalk: 4.1.2 cjs-module-lexer: 1.2.2 collect-v8-coverage: 1.0.1 glob: 7.2.3 graceful-fs: 4.2.10 - jest-haste-map: 29.1.2 - jest-message-util: 29.1.2 - jest-mock: 29.1.2 - jest-regex-util: 29.0.0 - jest-resolve: 29.1.2 - jest-snapshot: 29.1.2 - jest-util: 29.1.2 + jest-haste-map: 29.2.0 + jest-message-util: 29.2.0 + jest-mock: 29.2.0 + jest-regex-util: 29.2.0 + jest-resolve: 29.2.0 + jest-snapshot: 29.2.0 + jest-util: 29.2.0 slash: 3.0.0 strip-bom: 4.0.0 transitivePeerDependencies: - supports-color dev: true - /jest-snapshot/29.1.2: - resolution: {integrity: sha512-rYFomGpVMdBlfwTYxkUp3sjD6usptvZcONFYNqVlaz4EpHPnDvlWjvmOQ9OCSNKqYZqLM2aS3wq01tWujLg7gg==} + /jest-snapshot/29.2.0: + resolution: {integrity: sha512-YCKrOR0PLRXROmww73fHO9oeY4tL+LPQXWR3yml1+hKbQDR8j1VUrVzB65hKSJJgxBOr1vWx+hmz2by8JjAU5w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/core': 7.19.3 - '@babel/generator': 7.19.3 + '@babel/generator': 7.19.5 '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.19.3 '@babel/plugin-syntax-typescript': 7.18.6_@babel+core@7.19.3 - '@babel/traverse': 7.19.3 - '@babel/types': 7.19.3 - '@jest/expect-utils': 29.1.2 - '@jest/transform': 29.1.2 - '@jest/types': 29.1.2 + '@babel/traverse': 7.19.4 + '@babel/types': 7.19.4 + '@jest/expect-utils': 29.2.0 + '@jest/transform': 29.2.0 + '@jest/types': 29.2.0 '@types/babel__traverse': 7.18.2 '@types/prettier': 2.7.1 babel-preset-current-node-syntax: 1.0.1_@babel+core@7.19.3 chalk: 4.1.2 - expect: 29.1.2 + expect: 29.2.0 graceful-fs: 4.2.10 - jest-diff: 29.1.2 - jest-get-type: 29.0.0 - jest-haste-map: 29.1.2 - jest-matcher-utils: 29.1.2 - jest-message-util: 29.1.2 - jest-util: 29.1.2 + jest-diff: 29.2.0 + jest-get-type: 29.2.0 + jest-haste-map: 29.2.0 + jest-matcher-utils: 29.2.0 + jest-message-util: 29.2.0 + jest-util: 29.2.0 natural-compare: 1.4.0 - pretty-format: 29.1.2 + pretty-format: 29.2.0 semver: 7.3.8 transitivePeerDependencies: - supports-color @@ -8042,37 +8145,49 @@ packages: resolution: {integrity: sha512-vPCk9F353i0Ymx3WQq3+a4lZ07NXu9Ca8wya6o4Fe4/aO1e1awMMprZ3woPFpKwghEOW+UXgd15vVotuNN9ONQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.1.2 - '@types/node': 18.8.3 + '@jest/types': 29.2.0 + '@types/node': 18.11.0 chalk: 4.1.2 ci-info: 3.4.0 graceful-fs: 4.2.10 picomatch: 2.3.1 dev: true - /jest-validate/29.1.2: - resolution: {integrity: sha512-k71pOslNlV8fVyI+mEySy2pq9KdXdgZtm7NHrBX8LghJayc3wWZH0Yr0mtYNGaCU4F1OLPXRkwZR0dBm/ClshA==} + /jest-util/29.2.0: + resolution: {integrity: sha512-8M1dx12ujkBbnhwytrezWY0Ut79hbflwodE+qZKjxSRz5qt4xDp6dQQJaOCFvCmE0QJqp9KyEK33lpPNjnhevw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.1.2 + '@jest/types': 29.2.0 + '@types/node': 18.11.0 + chalk: 4.1.2 + ci-info: 3.5.0 + graceful-fs: 4.2.10 + picomatch: 2.3.1 + dev: true + + /jest-validate/29.2.0: + resolution: {integrity: sha512-4Vl51bPNeFeDok9aJiOnrC6tqJbOp4iMCYlewoC2ZzYJZ5+6pfr3KObAdx5wP8auHcg2MRaguiqj5OdScZa72g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.2.0 camelcase: 6.3.0 chalk: 4.1.2 - jest-get-type: 29.0.0 + jest-get-type: 29.2.0 leven: 3.1.0 - pretty-format: 29.1.2 + pretty-format: 29.2.0 dev: true - /jest-watcher/29.1.2: - resolution: {integrity: sha512-6JUIUKVdAvcxC6bM8/dMgqY2N4lbT+jZVsxh0hCJRbwkIEnbr/aPjMQ28fNDI5lB51Klh00MWZZeVf27KBUj5w==} + /jest-watcher/29.2.0: + resolution: {integrity: sha512-bRh0JdUeN+cl9XfK7tMnXLm4Mv70hG2SZlqbkFe5CTs7oeCkbwlGBk/mEfEJ63mrxZ8LPbnfaMpfSmkhEQBEGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/test-result': 29.1.2 - '@jest/types': 29.1.2 - '@types/node': 18.8.3 + '@jest/test-result': 29.2.0 + '@jest/types': 29.2.0 + '@types/node': 18.11.0 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.10.2 - jest-util: 29.1.2 + jest-util: 29.2.0 string-length: 4.0.2 dev: true @@ -8080,18 +8195,18 @@ packages: resolution: {integrity: sha512-ai0S49FU9FjUqtXOpkVj26WGc3Lsh6lBPkQABKtKoLUoR60Z42XBBFyNykaZpWRRfIPxprrahLsedPNAVDkJ3w==} dev: true - /jest-worker/29.1.2: - resolution: {integrity: sha512-AdTZJxKjTSPHbXT/AIOjQVmoFx0LHFcVabWu0sxI7PAy7rFf8c0upyvgBKgguVXdM4vY74JdwkyD4hSmpTW8jA==} + /jest-worker/29.2.0: + resolution: {integrity: sha512-mluOlMbRX1H59vGVzPcVg2ALfCausbBpxC8a2KWOzInhYHZibbHH8CB0C1JkmkpfurrkOYgF7FPmypuom1OM9A==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 18.8.3 - jest-util: 29.1.2 + '@types/node': 18.11.0 + jest-util: 29.2.0 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true - /jest/29.1.2_@types+node@18.8.3: - resolution: {integrity: sha512-5wEIPpCezgORnqf+rCaYD1SK+mNN7NsstWzIsuvsnrhR/hSxXWd82oI7DkrbJ+XTD28/eG8SmxdGvukrGGK6Tw==} + /jest/29.2.0_@types+node@18.11.0: + resolution: {integrity: sha512-6krPemKUXCEu5Fh3j6ZVoLMjpTQVm0OCU+7f3K/9gllX8wNIE6NSCQ6s0q2RDoiKLRaQlVRHyscjSPRPqCI0Fg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true peerDependencies: @@ -8100,10 +8215,10 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.1.2 - '@jest/types': 29.1.2 + '@jest/core': 29.2.0 + '@jest/types': 29.2.0 import-local: 3.1.0 - jest-cli: 29.1.2_@types+node@18.8.3 + jest-cli: 29.2.0_@types+node@18.11.0 transitivePeerDependencies: - '@types/node' - supports-color @@ -8174,8 +8289,8 @@ packages: argparse: 2.0.1 dev: true - /jsdom/20.0.0: - resolution: {integrity: sha512-x4a6CKCgx00uCmP+QakBDFXwjAJ69IkkIWHmtmjd3wvXPcdOS44hfX2vqkOQrVrq8l9DhNNADZRXaCEWvgXtVA==} + /jsdom/20.0.1: + resolution: {integrity: sha512-pksjj7Rqoa+wdpkKcLzQRHhJCEE42qQhl/xLMUKHgoSejaKOdaXEAnqs6uDNwMl/fciHTzKeR8Wm8cw7N+g98A==} engines: {node: '>=14'} peerDependencies: canvas: ^2.5.0 @@ -8185,11 +8300,11 @@ packages: dependencies: abab: 2.0.6 acorn: 8.8.0 - acorn-globals: 6.0.0 + acorn-globals: 7.0.1 cssom: 0.5.0 cssstyle: 2.3.0 data-urls: 3.0.2 - decimal.js: 10.4.1 + decimal.js: 10.4.2 domexception: 4.0.0 escodegen: 2.0.0 form-data: 4.0.0 @@ -8202,7 +8317,6 @@ packages: saxes: 6.0.0 symbol-tree: 3.2.4 tough-cookie: 4.1.2 - w3c-hr-time: 1.0.2 w3c-xmlserializer: 3.0.0 webidl-conversions: 7.0.0 whatwg-encoding: 2.0.0 @@ -8543,7 +8657,7 @@ packages: resolution: {integrity: sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==} engines: {node: '>=12'} dependencies: - chalk: 5.1.0 + chalk: 5.1.2 is-unicode-supported: 1.3.0 dev: false @@ -8985,7 +9099,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.1.4 - es-abstract: 1.20.2 + es-abstract: 1.20.4 dev: true /object.fromentries/2.0.5: @@ -8994,14 +9108,14 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.1.4 - es-abstract: 1.20.2 + es-abstract: 1.20.4 dev: true /object.hasown/1.1.1: resolution: {integrity: sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==} dependencies: define-properties: 1.1.4 - es-abstract: 1.20.2 + es-abstract: 1.20.4 dev: true /object.values/1.1.5: @@ -9010,7 +9124,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.1.4 - es-abstract: 1.20.2 + es-abstract: 1.20.4 dev: true /once/1.4.0: @@ -9062,7 +9176,7 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: bl: 5.0.0 - chalk: 5.1.0 + chalk: 5.1.2 cli-cursor: 4.0.0 cli-spinners: 2.7.0 is-interactive: 2.0.0 @@ -9122,7 +9236,7 @@ packages: resolution: {integrity: sha512-hySwcV8RAWeAfPsXb9/HGSPn8lwDnv6fabH+obUZKX169QknRkRhPxd1yMubpKDskLFATkl3jHpNtVtDPFA0Wg==} engines: {node: '>=14.16'} dependencies: - got: 12.5.1 + got: 12.5.2 registry-auth-token: 5.0.1 registry-url: 6.0.1 semver: 7.3.8 @@ -9277,25 +9391,25 @@ packages: find-up: 4.1.0 dev: true - /postcss-import/14.1.0_postcss@8.4.17: + /postcss-import/14.1.0_postcss@8.4.18: resolution: {integrity: sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==} engines: {node: '>=10.0.0'} peerDependencies: postcss: ^8.0.0 dependencies: - postcss: 8.4.17 + postcss: 8.4.18 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.1 - /postcss-js/4.0.0_postcss@8.4.17: + /postcss-js/4.0.0_postcss@8.4.18: resolution: {integrity: sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==} engines: {node: ^12 || ^14 || >= 16} peerDependencies: postcss: ^8.3.3 dependencies: camelcase-css: 2.0.1 - postcss: 8.4.17 + postcss: 8.4.18 /postcss-load-config/3.1.4: resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} @@ -9313,7 +9427,7 @@ packages: yaml: 1.10.2 dev: true - /postcss-load-config/3.1.4_postcss@8.4.17: + /postcss-load-config/3.1.4_postcss@8.4.18: resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} engines: {node: '>= 10'} peerDependencies: @@ -9326,27 +9440,27 @@ packages: optional: true dependencies: lilconfig: 2.0.6 - postcss: 8.4.17 + postcss: 8.4.18 yaml: 1.10.2 - /postcss-multiple-tailwind/1.0.1_eu2ss2h6tgtyzhkkx73xmgf5uq: + /postcss-multiple-tailwind/1.0.1_jtne6uic3zgisdnyalmn3bub4i: resolution: {integrity: sha512-2HFAvNLBfEFQn9x4XZsOrsTdzJCqiTyOK3TCDafZlY0c4LQztybL73e26X3dHg2i3jwc700M6cTLLthCmAgAVw==} engines: {node: '>=10.0.0'} peerDependencies: postcss: ^8.2.8 tailwindcss: ^3.0.0 dependencies: - postcss: 8.4.17 - tailwindcss: 3.1.8_postcss@8.4.17 + postcss: 8.4.18 + tailwindcss: 3.1.8_postcss@8.4.18 dev: true - /postcss-nested/5.0.6_postcss@8.4.17: + /postcss-nested/5.0.6_postcss@8.4.18: resolution: {integrity: sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.2.14 dependencies: - postcss: 8.4.17 + postcss: 8.4.18 postcss-selector-parser: 6.0.10 /postcss-selector-parser/6.0.10: @@ -9368,8 +9482,8 @@ packages: source-map-js: 1.0.2 dev: false - /postcss/8.4.17: - resolution: {integrity: sha512-UNxNOLQydcOFi41yHNMcKRZ39NeXlr8AxGuZJsdub8vIb12fHzcq37DTU/QtbI6WLxNg2gF9Z+8qtRwTj1UI1Q==} + /postcss/8.4.18: + resolution: {integrity: sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.4 @@ -9454,6 +9568,15 @@ packages: react-is: 18.2.0 dev: true + /pretty-format/29.2.0: + resolution: {integrity: sha512-QCSUFdwOi924g24czhOH5eTkXxUCqlLGZBRCySlwDYHIXRJkdGyjJc9nZaqhlFBZws8dq5Dvk0lCilsmlfsPxw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.0.0 + ansi-styles: 5.2.0 + react-is: 18.2.0 + dev: true + /process-nextick-args/2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} dev: false @@ -9497,7 +9620,7 @@ packages: '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 '@types/long': 4.0.2 - '@types/node': 18.8.3 + '@types/node': 18.11.0 long: 4.0.0 dev: false @@ -9516,7 +9639,7 @@ packages: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 18.8.3 + '@types/node': 18.11.0 long: 5.2.0 dev: false @@ -9571,7 +9694,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.19.0 + '@babel/runtime': 7.19.4 classnames: 2.3.2 dom-align: 1.12.3 lodash: 4.17.21 @@ -9587,7 +9710,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.19.0 + '@babel/runtime': 7.19.4 array-tree-filter: 2.1.0 classnames: 2.3.2 rc-select: 14.1.13_biqbaboplfbrettd7655fr4n2y @@ -9603,7 +9726,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.19.0 + '@babel/runtime': 7.19.4 classnames: 2.3.2 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 @@ -9615,7 +9738,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.19.0 + '@babel/runtime': 7.19.4 classnames: 2.3.2 rc-motion: 2.6.2_biqbaboplfbrettd7655fr4n2y rc-util: 5.24.4_biqbaboplfbrettd7655fr4n2y @@ -9630,7 +9753,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.19.0 + '@babel/runtime': 7.19.4 classnames: 2.3.2 rc-motion: 2.6.2_biqbaboplfbrettd7655fr4n2y rc-util: 5.24.4_biqbaboplfbrettd7655fr4n2y @@ -9644,7 +9767,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.19.0 + '@babel/runtime': 7.19.4 classnames: 2.3.2 rc-motion: 2.6.2_biqbaboplfbrettd7655fr4n2y rc-util: 5.24.4_biqbaboplfbrettd7655fr4n2y @@ -9658,7 +9781,7 @@ packages: react: '>=16.11.0' react-dom: '>=16.11.0' dependencies: - '@babel/runtime': 7.19.0 + '@babel/runtime': 7.19.4 classnames: 2.3.2 rc-trigger: 5.3.1_biqbaboplfbrettd7655fr4n2y rc-util: 5.24.4_biqbaboplfbrettd7655fr4n2y @@ -9673,7 +9796,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.19.0 + '@babel/runtime': 7.19.4 async-validator: 4.2.5 rc-util: 5.24.4_biqbaboplfbrettd7655fr4n2y react: 18.2.0 @@ -9686,7 +9809,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.19.0 + '@babel/runtime': 7.19.4 classnames: 2.3.2 rc-dialog: 8.9.0_biqbaboplfbrettd7655fr4n2y rc-util: 5.24.4_biqbaboplfbrettd7655fr4n2y @@ -9700,7 +9823,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.19.0 + '@babel/runtime': 7.19.4 classnames: 2.3.2 rc-util: 5.24.4_biqbaboplfbrettd7655fr4n2y react: 18.2.0 @@ -9713,23 +9836,23 @@ packages: react: '>=16.0.0' react-dom: '>=16.0.0' dependencies: - '@babel/runtime': 7.19.0 + '@babel/runtime': 7.19.4 classnames: 2.3.2 rc-util: 5.24.4_biqbaboplfbrettd7655fr4n2y react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: false - /rc-mentions/1.9.2_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-uxb/lzNnEGmvraKWNGE6KXMVXvt8RQv9XW8R0Dqi3hYsyPiAZeHRCHQKdLARuk5YBhFhZ6ga55D/8XuY367g3g==} + /rc-mentions/1.10.0_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-oMlYWnwXSxP2NQVlgxOTzuG/u9BUc3ySY78K3/t7MNhJWpZzXTao+/Bic6tyZLuNCO89//hVQJBdaR2rnFQl6Q==} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.19.0 + '@babel/runtime': 7.19.4 classnames: 2.3.2 rc-menu: 9.6.4_biqbaboplfbrettd7655fr4n2y - rc-textarea: 0.3.7_biqbaboplfbrettd7655fr4n2y + rc-textarea: 0.4.5_biqbaboplfbrettd7655fr4n2y rc-trigger: 5.3.1_biqbaboplfbrettd7655fr4n2y rc-util: 5.24.4_biqbaboplfbrettd7655fr4n2y react: 18.2.0 @@ -9742,7 +9865,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.19.0 + '@babel/runtime': 7.19.4 classnames: 2.3.2 rc-motion: 2.6.2_biqbaboplfbrettd7655fr4n2y rc-overflow: 1.2.8_biqbaboplfbrettd7655fr4n2y @@ -9759,7 +9882,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.19.0 + '@babel/runtime': 7.19.4 classnames: 2.3.2 rc-util: 5.24.4_biqbaboplfbrettd7655fr4n2y react: 18.2.0 @@ -9773,7 +9896,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.19.0 + '@babel/runtime': 7.19.4 classnames: 2.3.2 rc-motion: 2.6.2_biqbaboplfbrettd7655fr4n2y rc-util: 5.24.4_biqbaboplfbrettd7655fr4n2y @@ -9787,7 +9910,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.19.0 + '@babel/runtime': 7.19.4 classnames: 2.3.2 rc-resize-observer: 1.2.0_biqbaboplfbrettd7655fr4n2y rc-util: 5.24.4_biqbaboplfbrettd7655fr4n2y @@ -9801,20 +9924,20 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.19.0 + '@babel/runtime': 7.19.4 classnames: 2.3.2 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: false - /rc-picker/2.6.10_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-9wYtw0DFWs9FO92Qh2D76P0iojUr8ZhLOtScUeOit6ks/F+TBLrOC1uze3IOu+u9gbDAjmosNWLKbBzx/Yuv2w==} + /rc-picker/2.6.11_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-INJ7ULu+Kj4UgqbcqE8Q+QpMw55xFf9kkyLBHJFk0ihjJpAV4glialRfqHE7k4KX2BWYPQfpILwhwR14x2EiRQ==} engines: {node: '>=8.x'} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.19.0 + '@babel/runtime': 7.19.4 classnames: 2.3.2 date-fns: 2.29.3 dayjs: 1.11.5 @@ -9832,7 +9955,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.19.0 + '@babel/runtime': 7.19.4 classnames: 2.3.2 rc-util: 5.24.4_biqbaboplfbrettd7655fr4n2y react: 18.2.0 @@ -9846,7 +9969,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.19.0 + '@babel/runtime': 7.19.4 classnames: 2.3.2 rc-util: 5.24.4_biqbaboplfbrettd7655fr4n2y react: 18.2.0 @@ -9859,7 +9982,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.19.0 + '@babel/runtime': 7.19.4 classnames: 2.3.2 rc-util: 5.24.4_biqbaboplfbrettd7655fr4n2y react: 18.2.0 @@ -9873,7 +9996,7 @@ packages: react: '>=16.0.0' react-dom: '>=16.0.0' dependencies: - '@babel/runtime': 7.19.0 + '@babel/runtime': 7.19.4 classnames: 2.3.2 rc-motion: 2.6.2_biqbaboplfbrettd7655fr4n2y rc-util: 5.24.4_biqbaboplfbrettd7655fr4n2y @@ -9888,13 +10011,13 @@ packages: react: '*' react-dom: '*' dependencies: - '@babel/runtime': 7.19.0 + '@babel/runtime': 7.19.4 classnames: 2.3.2 rc-motion: 2.6.2_biqbaboplfbrettd7655fr4n2y rc-overflow: 1.2.8_biqbaboplfbrettd7655fr4n2y rc-trigger: 5.3.1_biqbaboplfbrettd7655fr4n2y rc-util: 5.24.4_biqbaboplfbrettd7655fr4n2y - rc-virtual-list: 3.4.8_biqbaboplfbrettd7655fr4n2y + rc-virtual-list: 3.4.10_biqbaboplfbrettd7655fr4n2y react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: false @@ -9906,7 +10029,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.19.0 + '@babel/runtime': 7.19.4 classnames: 2.3.2 rc-util: 5.24.4_biqbaboplfbrettd7655fr4n2y react: 18.2.0 @@ -9921,7 +10044,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.19.0 + '@babel/runtime': 7.19.4 classnames: 2.3.2 rc-util: 5.24.4_biqbaboplfbrettd7655fr4n2y react: 18.2.0 @@ -9934,7 +10057,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.19.0 + '@babel/runtime': 7.19.4 classnames: 2.3.2 rc-util: 5.24.4_biqbaboplfbrettd7655fr4n2y react: 18.2.0 @@ -9948,7 +10071,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.19.0 + '@babel/runtime': 7.19.4 classnames: 2.3.2 rc-resize-observer: 1.2.0_biqbaboplfbrettd7655fr4n2y rc-util: 5.24.4_biqbaboplfbrettd7655fr4n2y @@ -9957,14 +10080,14 @@ packages: shallowequal: 1.1.0 dev: false - /rc-tabs/12.1.0-alpha.1_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-M+B88WEnGSuE+mR54fpgPbZLAakzxa/H6FmEetLBl5WG4I3AcwSk9amuIPC/tu0KXBl+H6Bg5ZwrrEUOBUvgzg==} + /rc-tabs/12.2.1_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-09pVv4kN8VFqp6THceEmxOW8PAShQC08hrroeVYP4Y8YBFaP1PIWdyFL01czcbyz5YZFj9flZ7aljMaAl0jLVg==} engines: {node: '>=8.x'} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.19.0 + '@babel/runtime': 7.19.4 classnames: 2.3.2 rc-dropdown: 4.0.1_biqbaboplfbrettd7655fr4n2y rc-menu: 9.6.4_biqbaboplfbrettd7655fr4n2y @@ -9975,13 +10098,13 @@ packages: react-dom: 18.2.0_react@18.2.0 dev: false - /rc-textarea/0.3.7_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-yCdZ6binKmAQB13hc/oehh0E/QRwoPP1pjF21aHBxlgXO3RzPF6dUu4LG2R4FZ1zx/fQd2L1faktulrXOM/2rw==} + /rc-textarea/0.4.5_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-WHeJRgUlloNyVgTsItMrIXwMhU6P3NmrUDkxX+JRwEpJjECsKtZNlNcXe9pHNLCaYQ3Z1cVCfsClhgDDgJ2kFQ==} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.19.0 + '@babel/runtime': 7.19.4 classnames: 2.3.2 rc-resize-observer: 1.2.0_biqbaboplfbrettd7655fr4n2y rc-util: 5.24.4_biqbaboplfbrettd7655fr4n2y @@ -9996,7 +10119,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.19.0 + '@babel/runtime': 7.19.4 classnames: 2.3.2 rc-trigger: 5.3.1_biqbaboplfbrettd7655fr4n2y react: 18.2.0 @@ -10009,7 +10132,7 @@ packages: react: '*' react-dom: '*' dependencies: - '@babel/runtime': 7.19.0 + '@babel/runtime': 7.19.4 classnames: 2.3.2 rc-select: 14.1.13_biqbaboplfbrettd7655fr4n2y rc-tree: 5.7.0_biqbaboplfbrettd7655fr4n2y @@ -10025,11 +10148,11 @@ packages: react: '*' react-dom: '*' dependencies: - '@babel/runtime': 7.19.0 + '@babel/runtime': 7.19.4 classnames: 2.3.2 rc-motion: 2.6.2_biqbaboplfbrettd7655fr4n2y rc-util: 5.24.4_biqbaboplfbrettd7655fr4n2y - rc-virtual-list: 3.4.8_biqbaboplfbrettd7655fr4n2y + rc-virtual-list: 3.4.10_biqbaboplfbrettd7655fr4n2y react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: false @@ -10041,7 +10164,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.19.0 + '@babel/runtime': 7.19.4 classnames: 2.3.2 rc-align: 4.0.12_biqbaboplfbrettd7655fr4n2y rc-motion: 2.6.2_biqbaboplfbrettd7655fr4n2y @@ -10056,7 +10179,7 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.19.0 + '@babel/runtime': 7.19.4 classnames: 2.3.2 rc-util: 5.24.4_biqbaboplfbrettd7655fr4n2y react: 18.2.0 @@ -10069,15 +10192,15 @@ packages: react: '>=16.9.0' react-dom: '>=16.9.0' dependencies: - '@babel/runtime': 7.19.0 + '@babel/runtime': 7.19.4 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 react-is: 16.13.1 shallowequal: 1.1.0 dev: false - /rc-virtual-list/3.4.8_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-qSN+Rv4i/E7RCTvTMr1uZo7f3crJJg/5DekoCagydo9zsXrxj07zsFSxqizqW+ldGA16lwa8So/bIbV9Ofjddg==} + /rc-virtual-list/3.4.10_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-Jv0cgJxJ+8F/YViW8WGs/jQF2rmT8RUcJ5uDJs5MOFLTYLAvCpM/xU+Zu6EpCun50fmovhXiItQctcfE2UY3Aw==} engines: {node: '>=8.x'} peerDependencies: react: '*' @@ -10189,7 +10312,7 @@ packages: react: '>=16.6.0' react-dom: '>=16.6.0' dependencies: - '@babel/runtime': 7.19.0 + '@babel/runtime': 7.19.4 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -10269,6 +10392,9 @@ packages: '@babel/runtime': 7.18.9 dev: false + /regenerator-runtime/0.13.10: + resolution: {integrity: sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw==} + /regenerator-runtime/0.13.9: resolution: {integrity: sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==} @@ -10397,8 +10523,8 @@ packages: inherits: 2.0.4 dev: false - /rollup/2.78.1: - resolution: {integrity: sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==} + /rollup/2.79.1: + resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: @@ -10426,6 +10552,14 @@ packages: /safe-buffer/5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + /safe-regex-test/1.0.0: + resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.1.3 + is-regex: 1.1.4 + dev: true + /safer-buffer/2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -10547,8 +10681,8 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - /shell-quote/1.7.3: - resolution: {integrity: sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==} + /shell-quote/1.7.4: + resolution: {integrity: sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==} dev: false /side-channel/1.0.4: @@ -10733,7 +10867,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.1.4 - es-abstract: 1.20.2 + es-abstract: 1.20.4 get-intrinsic: 1.1.3 has-symbols: 1.0.3 internal-slot: 1.0.3 @@ -10746,7 +10880,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.1.4 - es-abstract: 1.20.2 + es-abstract: 1.20.4 dev: true /string.prototype.trimstart/1.0.5: @@ -10754,7 +10888,7 @@ packages: dependencies: call-bind: 1.0.2 define-properties: 1.1.4 - es-abstract: 1.20.2 + es-abstract: 1.20.4 dev: true /string_decoder/1.1.1: @@ -10809,11 +10943,11 @@ packages: engines: {node: '>=8'} dev: true - /stripe/10.13.0: - resolution: {integrity: sha512-Uq+hToFOXHU+BHgzUmop2Monc0dM8pluXcoCOrgz9oY8XBDnSPOuXAJdKa04x5DCEgKWrFMHncQfAgwqzSgaTQ==} + /stripe/10.14.0: + resolution: {integrity: sha512-cXqUdZvrU20KElhLjzw/kW5t2SLLUENqeEftaiQXLogkUdNHyz/L12S4WHmQ8h0KHHFhxO39I7Q9GkJO1MMzzw==} engines: {node: ^8.1 || >=10.*} dependencies: - '@types/node': 18.8.3 + '@types/node': 18.11.0 qs: 6.11.0 dev: false @@ -10837,8 +10971,8 @@ packages: resolution: {integrity: sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag==} dev: false - /sucrase/3.25.0: - resolution: {integrity: sha512-WxTtwEYXSmZArPGStGBicyRsg5TBEFhT5b7N+tF+zauImP0Acy+CoUK0/byJ8JNPK/5lbpWIVuFagI4+0l85QQ==} + /sucrase/3.28.0: + resolution: {integrity: sha512-TK9600YInjuiIhVM3729rH4ZKPOsGeyXUwY+Ugu9eilNbdTFyHr6XcAGYbRVZPDgWj6tgI7bx95aaJjHnbffag==} engines: {node: '>=8'} hasBin: true dependencies: @@ -10869,19 +11003,11 @@ packages: has-flag: 4.0.0 dev: true - /supports-hyperlinks/2.3.0: - resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} - engines: {node: '>=8'} - dependencies: - has-flag: 4.0.0 - supports-color: 7.2.0 - dev: true - /supports-preserve-symlinks-flag/1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - /svelte-preprocess/4.10.7_qy6w2iv5hnh55blsjuu7uihyzm: + /svelte-preprocess/4.10.7_besnmoibwkhwtentvwuriss7pa: resolution: {integrity: sha512-sNPBnqYD6FnmdBrUmBCaqS00RyCsCpj2BG58A1JBswNF7b0OKviwxqVrOL/CKyJrLSClrSeqQv5BXNg2RUbPOw==} engines: {node: '>= 9.11.2'} requiresBuild: true @@ -10928,12 +11054,12 @@ packages: magic-string: 0.25.9 sorcery: 0.10.0 strip-indent: 3.0.0 - svelte: 3.50.1 + svelte: 3.52.0 typescript: 4.8.4 dev: false - /svelte/3.50.1: - resolution: {integrity: sha512-bS4odcsdj5D5jEg6riZuMg5NKelzPtmsCbD9RG+8umU03TeNkdWnP6pqbCm0s8UQNBkqk29w/Bdubn3C+HWSwA==} + /svelte/3.52.0: + resolution: {integrity: sha512-FxcnEUOAVfr10vDU5dVgJN19IvqeHQCS1zfe8vayTfis9A2t5Fhx+JDe5uv/C3j//bB1umpLJ6quhgs9xyUbCQ==} engines: {node: '>= 8'} /svgo/2.8.0: @@ -10961,7 +11087,7 @@ packages: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} dev: true - /tailwindcss/3.1.8_postcss@8.4.17: + /tailwindcss/3.1.8_postcss@8.4.18: resolution: {integrity: sha512-YSneUCZSFDYMwk+TGq8qYFdCA3yfBRdBlS7txSq0LUmzyeqRe3a8fBQzbz9M3WS/iFT4BNf/nmw9mEzrnSaC0g==} engines: {node: '>=12.13.0'} hasBin: true @@ -10981,11 +11107,11 @@ packages: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.0.0 - postcss: 8.4.17 - postcss-import: 14.1.0_postcss@8.4.17 - postcss-js: 4.0.0_postcss@8.4.17 - postcss-load-config: 3.1.4_postcss@8.4.17 - postcss-nested: 5.0.6_postcss@8.4.17 + postcss: 8.4.18 + postcss-import: 14.1.0_postcss@8.4.18 + postcss-js: 4.0.0_postcss@8.4.18 + postcss-load-config: 3.1.4_postcss@8.4.18 + postcss-nested: 5.0.6_postcss@8.4.18 postcss-selector-parser: 6.0.10 postcss-value-parser: 4.2.0 quick-lru: 5.1.1 @@ -11033,14 +11159,6 @@ packages: engines: {node: '>=8'} dev: true - /terminal-link/2.1.1: - resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} - engines: {node: '>=8'} - dependencies: - ansi-escapes: 4.3.2 - supports-hyperlinks: 2.3.0 - dev: true - /terser/5.14.2: resolution: {integrity: sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==} engines: {node: '>=10'} @@ -11165,7 +11283,7 @@ packages: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: true - /ts-jest/29.0.3_tgejc6cnv2pbkgcnmxq3dkgmme: + /ts-jest/29.0.3_tffzzkezgwx2pkcwct6fbmkuui: resolution: {integrity: sha512-Ibygvmuyq1qp/z3yTh9QTwVVAbFdDy/+4BtIQR2sp6baF2SJU/8CKK/hhnGIDY2L90Az2jIqTwZPnN2p+BweiQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -11186,10 +11304,10 @@ packages: esbuild: optional: true dependencies: - '@jest/types': 29.1.2 + '@jest/types': 29.2.0 bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 29.1.2_@types+node@18.8.3 + jest: 29.2.0_@types+node@18.11.0 jest-util: 29.1.2 json5: 2.2.1 lodash.memoize: 4.1.2 @@ -11206,8 +11324,8 @@ packages: /tslib/2.4.0: resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} - /tsup/6.2.3: - resolution: {integrity: sha512-J5Pu2Dx0E1wlpIEsVFv9ryzP1pZ1OYsJ2cBHZ7GrKteytNdzaSz5hmLX7/nAxtypq+jVkVvA79d7S83ETgHQ5w==} + /tsup/6.3.0: + resolution: {integrity: sha512-IaNQO/o1rFgadLhNonVKNCT2cks+vvnWX3DnL8sB87lBDqRvJXHENr5lSPJlqwplUlDxSwZK8dSg87rgBu6Emw==} engines: {node: '>=14'} hasBin: true peerDependencies: @@ -11222,27 +11340,27 @@ packages: typescript: optional: true dependencies: - bundle-require: 3.1.0_esbuild@0.15.10 + bundle-require: 3.1.0_esbuild@0.15.11 cac: 6.7.14 chokidar: 3.5.3 debug: 4.3.4 - esbuild: 0.15.10 + esbuild: 0.15.11 execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 postcss-load-config: 3.1.4 resolve-from: 5.0.0 - rollup: 2.78.1 + rollup: 2.79.1 source-map: 0.8.0-beta.0 - sucrase: 3.25.0 + sucrase: 3.28.0 tree-kill: 1.2.2 transitivePeerDependencies: - supports-color - ts-node dev: true - /tsup/6.2.3_typescript@4.8.4: - resolution: {integrity: sha512-J5Pu2Dx0E1wlpIEsVFv9ryzP1pZ1OYsJ2cBHZ7GrKteytNdzaSz5hmLX7/nAxtypq+jVkVvA79d7S83ETgHQ5w==} + /tsup/6.3.0_typescript@4.8.4: + resolution: {integrity: sha512-IaNQO/o1rFgadLhNonVKNCT2cks+vvnWX3DnL8sB87lBDqRvJXHENr5lSPJlqwplUlDxSwZK8dSg87rgBu6Emw==} engines: {node: '>=14'} hasBin: true peerDependencies: @@ -11257,19 +11375,19 @@ packages: typescript: optional: true dependencies: - bundle-require: 3.1.0_esbuild@0.15.10 + bundle-require: 3.1.0_esbuild@0.15.11 cac: 6.7.14 chokidar: 3.5.3 debug: 4.3.4 - esbuild: 0.15.10 + esbuild: 0.15.11 execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 postcss-load-config: 3.1.4 resolve-from: 5.0.0 - rollup: 2.78.1 + rollup: 2.79.1 source-map: 0.8.0-beta.0 - sucrase: 3.25.0 + sucrase: 3.28.0 tree-kill: 1.2.2 typescript: 4.8.4 transitivePeerDependencies: @@ -11283,65 +11401,65 @@ packages: safe-buffer: 5.2.1 dev: false - /turbo-darwin-64/1.5.5: - resolution: {integrity: sha512-HvEn6P2B+NXDekq9LRpRgUjcT9/oygLTcK47U0qsAJZXRBSq/2hvD7lx4nAwgY/4W3rhYJeWtHTzbhoN6BXqGQ==} + /turbo-darwin-64/1.5.6: + resolution: {integrity: sha512-CWdXMwenBS2+QXIR2Czx7JPnAcoMzWx/QwTDcHVxZyeayMHgz8Oq5AHCtfaHDSfV8YhD3xa0GLSk6+cFt+W8BQ==} cpu: [x64] os: [darwin] requiresBuild: true dev: true optional: true - /turbo-darwin-arm64/1.5.5: - resolution: {integrity: sha512-Dmxr09IUy6M0nc7/xWod9galIO2DD500B75sJSkHeT+CCdJOWnlinux0ZPF8CSygNqymwYO8AO2l15/6yxcycg==} + /turbo-darwin-arm64/1.5.6: + resolution: {integrity: sha512-c/aXgW9JuXT2bJSKf01pdSDQKnrdcdj3WFKmKiVldb9We6eqFzI0fLHBK97k5LM/OesmRMfCMQ2Cv2DU8RqBAA==} cpu: [arm64] os: [darwin] requiresBuild: true dev: true optional: true - /turbo-linux-64/1.5.5: - resolution: {integrity: sha512-wd07TZ4zXXWjzZE00FcFMLmkybQQK/NV9ff66vvAV0vdiuacSMBCNLrD6Mm4ncfrUPW/rwFW5kU/7hyuEqqtDw==} + /turbo-linux-64/1.5.6: + resolution: {integrity: sha512-y/jNF7SG+XJEwk2GxIqy3g4dj/a0PgZKDGyOkp24qp4KBRcHBl6dI1ZEfNed30EhEqmW4F5Dr7IpeCZoqgbrMg==} cpu: [x64] os: [linux] requiresBuild: true dev: true optional: true - /turbo-linux-arm64/1.5.5: - resolution: {integrity: sha512-q3q33tuo74R7gicnfvFbnZZvqmlq7Vakcvx0eshifnJw4PR+oMnTCb4w8ElVFx070zsb8DVTibq99y8NJH8T1Q==} + /turbo-linux-arm64/1.5.6: + resolution: {integrity: sha512-FRcxPtW7eFrbR3QaYBVX8cK7i+2Cerqi6F0t5ulcq+d1OGSdSW3l35rPPyJdwCzCy+k/S9sBcyCV0RtbS6RKCQ==} cpu: [arm64] os: [linux] requiresBuild: true dev: true optional: true - /turbo-windows-64/1.5.5: - resolution: {integrity: sha512-lPp9kHonNFfqgovbaW+UAPO5cLmoAN+m3G3FzqcrRPnlzt97vXYsDhDd/4Zy3oAKoAcprtP4CGy0ddisqsKTVw==} + /turbo-windows-64/1.5.6: + resolution: {integrity: sha512-/5KIExY7zbrbeL5fhKGuO85u5VtJ3Ue4kI0MbYCNnTGe7a10yTYkwswgtGihsgEF4AW0Nm0159aHmXZS2Le8IA==} cpu: [x64] os: [win32] requiresBuild: true dev: true optional: true - /turbo-windows-arm64/1.5.5: - resolution: {integrity: sha512-3AfGULKNZiZVrEzsIE+W79ZRW1+f5r4nM4wLlJ1PTBHyRxBZdD6KTH1tijGfy/uTlcV5acYnKHEkDc6Q9PAXGQ==} + /turbo-windows-arm64/1.5.6: + resolution: {integrity: sha512-p+LQN9O39+rZuOAyc6BzyVGvdEKo+v+XmtdeyZsZpfj4xuOLtsEptW1w6cUD439u0YcPknuccGq1MQ0lXQ6Xuw==} cpu: [arm64] os: [win32] requiresBuild: true dev: true optional: true - /turbo/1.5.5: - resolution: {integrity: sha512-PVQSDl0STC9WXIyHcYUWs9gXsf8JjQig/FuHfuB8N6+XlgCGB3mPbfMEE6zrChGz2hufH4/guKRX1XJuNL6XTA==} + /turbo/1.5.6: + resolution: {integrity: sha512-xJO/fhiMo4lI62iGR9OgUfJTC9tnnuoMwNC52IfvvBDEPlA8RWGMS8SFpDVG9bNCXvVRrtUTNJXMe6pJWBiOTA==} hasBin: true requiresBuild: true optionalDependencies: - turbo-darwin-64: 1.5.5 - turbo-darwin-arm64: 1.5.5 - turbo-linux-64: 1.5.5 - turbo-linux-arm64: 1.5.5 - turbo-windows-64: 1.5.5 - turbo-windows-arm64: 1.5.5 + turbo-darwin-64: 1.5.6 + turbo-darwin-arm64: 1.5.6 + turbo-linux-64: 1.5.6 + turbo-linux-arm64: 1.5.6 + turbo-windows-64: 1.5.6 + turbo-windows-arm64: 1.5.6 dev: true /type-check/0.3.2: @@ -11499,9 +11617,9 @@ packages: resolution: {integrity: sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==} engines: {node: '>=10.12.0'} dependencies: - '@jridgewell/trace-mapping': 0.3.15 + '@jridgewell/trace-mapping': 0.3.17 '@types/istanbul-lib-coverage': 2.0.4 - convert-source-map: 1.8.0 + convert-source-map: 1.9.0 dev: true /validate-npm-package-license/3.0.4: @@ -11511,20 +11629,14 @@ packages: spdx-expression-parse: 3.0.1 dev: false - /vue/3.2.40: - resolution: {integrity: sha512-1mGHulzUbl2Nk3pfvI5aXYYyJUs1nm4kyvuz38u4xlQkLUn1i2R7nDbI4TufECmY8v1qNBHYy62bCaM+3cHP2A==} + /vue/3.2.41: + resolution: {integrity: sha512-uuuvnrDXEeZ9VUPljgHkqB5IaVO8SxhPpqF2eWOukVrBnRBx2THPSGQBnVRt0GrIG1gvCmFXMGbd7FqcT1ixNQ==} dependencies: - '@vue/compiler-dom': 3.2.40 - '@vue/compiler-sfc': 3.2.40 - '@vue/runtime-dom': 3.2.40 - '@vue/server-renderer': 3.2.40_vue@3.2.40 - '@vue/shared': 3.2.40 - - /w3c-hr-time/1.0.2: - resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} - dependencies: - browser-process-hrtime: 1.0.0 - dev: true + '@vue/compiler-dom': 3.2.41 + '@vue/compiler-sfc': 3.2.41 + '@vue/runtime-dom': 3.2.41 + '@vue/server-renderer': 3.2.41_vue@3.2.41 + '@vue/shared': 3.2.41 /w3c-xmlserializer/3.0.0: resolution: {integrity: sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==} diff --git a/templates/qtt b/templates/qtt index 16ef90625..3f1418ef2 160000 --- a/templates/qtt +++ b/templates/qtt @@ -1 +1 @@ -Subproject commit 16ef9062530d711c633c12411a6da3f4e6096e2b +Subproject commit 3f1418ef2a8da9f25751b40ca3950feaa7d0dba5 From 775c08e85be45df10517b6f7f91e9daa0bdb83e5 Mon Sep 17 00:00:00 2001 From: L <6723574+louisgv@users.noreply.github.com> Date: Mon, 17 Oct 2022 11:37:32 -0700 Subject: [PATCH 10/12] Update cli/plasmo/src/features/manifest-factory/create-manifest.ts Co-authored-by: Stefan Aleksic Signed-off-by: L <6723574+louisgv@users.noreply.github.com> --- cli/plasmo/src/features/manifest-factory/create-manifest.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/plasmo/src/features/manifest-factory/create-manifest.ts b/cli/plasmo/src/features/manifest-factory/create-manifest.ts index 04f33874b..30039a834 100644 --- a/cli/plasmo/src/features/manifest-factory/create-manifest.ts +++ b/cli/plasmo/src/features/manifest-factory/create-manifest.ts @@ -32,7 +32,7 @@ export async function createManifest(bundleConfig: PlasmoBundleConfig) { const hasEntrypoints = initResults.flat() if (!hasEntrypoints.includes(true)) { - wLog("Unable to find any entry files, the extension might be empty") + wLog("Unable to find any entry files. The extension might be empty") } const [hasPopup, hasOptions, hasNewtab, hasDevtools] = hasEntrypoints From cd53edfbd4f9b12494dd256c3ab597873c6d2200 Mon Sep 17 00:00:00 2001 From: Louis <6723574+louisgv@users.noreply.github.com> Date: Mon, 17 Oct 2022 14:58:45 -0400 Subject: [PATCH 11/12] fix minor bug --- cli/plasmo/templates/static/react18/content-script-ui-mount.tsx | 2 +- examples | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cli/plasmo/templates/static/react18/content-script-ui-mount.tsx b/cli/plasmo/templates/static/react18/content-script-ui-mount.tsx index 74ed9efa1..4bc48bf43 100644 --- a/cli/plasmo/templates/static/react18/content-script-ui-mount.tsx +++ b/cli/plasmo/templates/static/react18/content-script-ui-mount.tsx @@ -33,7 +33,7 @@ const render = createRender( break } case "overlay": { - const targetList = observer.mountState?.overlayTargetList || [ + const targetList = observer?.mountState.overlayTargetList || [ anchor.element ] diff --git a/examples b/examples index 83d09058a..8ef7fa64e 160000 --- a/examples +++ b/examples @@ -1 +1 @@ -Subproject commit 83d09058a9a00923ce7b368d828dfd8b010ddb8f +Subproject commit 8ef7fa64ea40aac477e86de3f1f7154ff2a4063c From 798e63d5ff41e45cb6a9f7d169b4d3bfd889a0a4 Mon Sep 17 00:00:00 2001 From: Louis <6723574+louisgv@users.noreply.github.com> Date: Mon, 17 Oct 2022 15:00:08 -0400 Subject: [PATCH 12/12] bump canary --- cli/create-plasmo/package.json | 2 +- cli/plasmo/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cli/create-plasmo/package.json b/cli/create-plasmo/package.json index 262f7867a..8dbb1014e 100644 --- a/cli/create-plasmo/package.json +++ b/cli/create-plasmo/package.json @@ -1,6 +1,6 @@ { "name": "create-plasmo", - "version": "0.57.0-alpha.0", + "version": "0.57.0-alpha.1", "description": "Create Plasmo Framework Browser Extension", "main": "dist/index.js", "bin": "dist/index.js", diff --git a/cli/plasmo/package.json b/cli/plasmo/package.json index 9cae4f2d3..d3421c1a4 100644 --- a/cli/plasmo/package.json +++ b/cli/plasmo/package.json @@ -1,6 +1,6 @@ { "name": "plasmo", - "version": "0.57.0-alpha.0", + "version": "0.57.0-alpha.1", "description": "The Plasmo Platform CLI", "main": "dist/index.js", "types": "dist/type.d.ts",