From 73b6310ce1b4af0033cd2a4fb5f2b1e2295e05cb Mon Sep 17 00:00:00 2001 From: TJ Couch <104016682+tjcouch-sil@users.noreply.github.com> Date: Tue, 17 Jan 2023 09:46:51 -0600 Subject: [PATCH 01/61] Initial commit --- LICENSE | 21 +++++++++++++++++++++ README.md | 2 ++ 2 files changed, 23 insertions(+) create mode 100644 LICENSE create mode 100644 README.md diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..0126101 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Paranext + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..68cc602 --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# paranext-extension-template +Basic extension template for Paranext From 1a3c09aa007ab2b5828dccc2765385da8823cfd6 Mon Sep 17 00:00:00 2001 From: tjcouch-sil Date: Wed, 26 Apr 2023 10:47:15 -0500 Subject: [PATCH 02/61] Added Vite/TypeScript/React and pulling papi types --- .gitignore | 22 + .vscode/launch.json | 24 + README.md | 31 + lib/extension-template-html.web-view.ejs | 140 ++ lib/extension-template.web-view.tsx | 52 + lib/main.ts | 186 ++ lib/vite-env.d.ts | 1 + package-lock.json | 2574 ++++++++++++++++++++++ package.json | 26 + public/manifest.json | 9 + tsconfig.json | 22 + tsconfig.node.json | 9 + vite.config.ts | 56 + 13 files changed, 3152 insertions(+) create mode 100644 .gitignore create mode 100644 .vscode/launch.json create mode 100644 lib/extension-template-html.web-view.ejs create mode 100644 lib/extension-template.web-view.tsx create mode 100644 lib/main.ts create mode 100644 lib/vite-env.d.ts create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 public/manifest.json create mode 100644 tsconfig.json create mode 100644 tsconfig.node.json create mode 100644 vite.config.ts diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8b7e502 --- /dev/null +++ b/.gitignore @@ -0,0 +1,22 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..217d6c8 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,24 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Watch and Build Extension", + "type": "node", + "request": "launch", + "runtimeExecutable": "npm", + "skipFiles": ["/**"], + "runtimeArgs": ["run", "start"] + }, + { + "name": "Build Extension", + "type": "node", + "request": "launch", + "runtimeExecutable": "npm", + "skipFiles": ["/**"], + "runtimeArgs": ["run", "build"] + } + ] +} \ No newline at end of file diff --git a/README.md b/README.md index 68cc602..0598eb9 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,33 @@ # paranext-extension-template Basic extension template for Paranext + +## Summary + +This is a Vite project template pre-configured to build Paranext extensions. + - `lib` contains the source code for the extension + - `lib/main.ts` is the main entry file for the extension + - `*.web-view.tsx` files will be treated as React WebViews + - `*.web-view.ejs` files will be treated as HTML WebViews + - `public/manifest.json` is the manifest file that defines the extension + +## To run + +Install dependencies: + +1. In order to have types for `papi`, we must build the `papi-dts` package locally (currently, `papi-dts` is a local package and is not published on `npm`): + 1. Follow the instructions to install [`paranext-core`](https://github.com/paranext/paranext-core#developer-install). If you are just building `papi-dts`, you do not need to follow the `dotnet` installation instructions. We recommend you clone `paranext-core` in the same parent directory in which you cloned this repository as it will make `papi-dts` installation simpler. + 2. In `paranext-core`, run `npm run build:types` to generate the `papi-dts` package. + 3. If you cloned `paranext-core` anywhere other than in the same parent directory in which you cloned this repository, you must update the path to `papi-dts` in this repository's `package.json` to point to the correct `paranext-core` directory. +2. Run `npm install` to install local and published dependencies + +To watch extension files (in `lib`) for changes: + +`npm start` + +## To publish + +To build the extension once: + +`npm run build` + +The extension will be the `dist` folder. You can copy this folder into Paranext's `extensions` folder, launch Paranext, and see it run! diff --git a/lib/extension-template-html.web-view.ejs b/lib/extension-template-html.web-view.ejs new file mode 100644 index 0000000..143e054 --- /dev/null +++ b/lib/extension-template-html.web-view.ejs @@ -0,0 +1,140 @@ + + + + +
Extension Template HTML
+
+ +
+
+
+ +
+
+
Any Greetings Updates: 0
+
+ Any Greetings Updates (via Bill): 0 +
+
Bill Greetings Updates: 0
+ + + diff --git a/lib/extension-template.web-view.tsx b/lib/extension-template.web-view.tsx new file mode 100644 index 0000000..8793726 --- /dev/null +++ b/lib/extension-template.web-view.tsx @@ -0,0 +1,52 @@ +import papi from "papi"; +import React from "react"; +import { QuickVerseDataProvider } from "./main"; + +const { useState } = React; +const { + react: { + hooks: { useData, useDataProvider }, + components: { Button }, + }, + logger, +} = papi; + +function ExtensionTemplateReact() { + const [clicks, setClicks] = useState(0); + + const quickVerseDataProvider = useDataProvider( + "quick-verse.quick-verse" + ); + + const [latestVerseText] = useData( + quickVerseDataProvider, + "latest", + "Loading latest Scripture text..." + ); + + return ( + <> +
Extension Template React
+
{latestVerseText}
+
+ +
+ + ); +} diff --git a/lib/main.ts b/lib/main.ts new file mode 100644 index 0000000..6b736bd --- /dev/null +++ b/lib/main.ts @@ -0,0 +1,186 @@ +import papi from "papi"; +import IDataProviderEngine from "shared/models/data-provider-engine.model"; +// @ts-expect-error ts(1192) this file has no default export; the text is exported by rollup +import extensionTemplateReact from "./extension-template.web-view"; +// @ts-expect-error ts(1192) this file has no default export; the text is exported by rollup +import extensionTemplateHtml from "./extension-template-html.web-view.ejs"; +import IDataProvider, { + DataProviderSubscriber, +} from "shared/models/data-provider.interface"; +import type { WebViewContentType } from "shared/data/web-view.model"; + +const { logger } = papi; + +console.log(import.meta.env.PROD); + +logger.info("Extension template is importing!"); + +const unsubscribers = []; + +export type QuickVerseSetData = string | { text: string; isHeresy: boolean }; + +export interface QuickVerseDataProvider + extends IDataProvider { + subscribe: DataProviderSubscriber; + set(selector: string, data: QuickVerseSetData): Promise; + setHeresy(verseRef: string, verseText: string): Promise; + get(selector: string): Promise; +} + +class QuickVerseDataProviderEngine + implements IDataProviderEngine +{ + /** + * Verses stored by the Data Provider. + * Keys are Scripture References. + * Values are { text: '', isChanged?: boolean } + */ + verses: { [scrRef: string]: { text: string; isChanged?: boolean } } = {}; + + /** Latest updated verse reference */ + latestVerseRef = "john 11:35"; + + // Note: this method does not have to be provided here for it to work properly because it is layered over on the papi. + // But because we provide it here, we must return `true` to notify like in the set method. + // The contents of this method run before the update is emitted. + // TODO: What will actually happen if we run this in `get`? Stack overflow? + notifyUpdate() { + logger.info( + `Quick verse notifyUpdate! latestVerseRef = ${this.latestVerseRef}` + ); + return true; + } + + /** + * @param selector Scripture reference + * @param data { text: '', isHeresy: true } Must inform us that you are a heretic + */ + // Note: this method gets layered over so that you can run `this.set` in the data provider engine, and it will notify update afterward. + async set(selector: string, data: QuickVerseSetData) { + // Just get notifications of updates with the 'notify' selector. Nothing to change + if (selector === "notify") return false; + + // You can't change scripture from just a string. You have to tell us you're a heretic + if (typeof data === "string" || data instanceof String) return false; + + // Only heretics change Scripture, so you have to tell us you're a heretic + if (!data.isHeresy) return false; + + // If there is no change in the verse text, don't update + if (data.text === this.verses[this.#getSelector(selector)].text) + return false; + + // Update the verse text, track the latest change, and send an update + this.verses[this.#getSelector(selector)] = { + text: data.text, + isChanged: true, + }; + if (selector !== "latest") + this.latestVerseRef = this.#getSelector(selector); + return true; + } + + /** + * Example of layering over set inside a data provider. This updates the verse text and sends an update event + * @param verseRef verse reference to change + * @param verseText text to update the verse to, you heretic + */ + async setHeresy(verseRef: string, verseText: string) { + return this.set(verseRef, { text: verseText, isHeresy: true }); + } + + /** + * @param selector + */ + get = async (selector: string) => { + // Just get notifications of updates with the 'notify' selector + if (selector === "notify") return undefined; + + let responseVerse = this.verses[this.#getSelector(selector)]; + + // If we don't already have the verse cached, cache it + if (!responseVerse) { + // Fetch the verse, cache it, and return it + try { + const verseResponse = await papi.fetch( + `https://bible-api.com/${encodeURIComponent( + this.#getSelector(selector) + )}` + ); + const verseData = await verseResponse.json(); + const text = verseData.text.replaceAll("\n", ""); + responseVerse = { text }; + this.verses[this.#getSelector(selector)] = responseVerse; + // Cache the verse text, track the latest cached verse, and send an update + if (selector !== "latest") + this.latestVerseRef = this.#getSelector(selector); + this.notifyUpdate(); + } catch (e) { + responseVerse = { + text: `Failed to fetch ${selector} from bible-api! Reason: ${e}`, + }; + } + } + + return responseVerse.text; + }; + + /** + * Valid selectors: + * - `'notify'` - informs the listener of any changes in quick verse text but does not carry data + * - `'latest'` - the latest-updated quick verse text including pulling a verse from the server and a heretic changing the verse + * - Scripture Reference strings. Ex: `'Romans 1:16'` + * @param selector selector provided by user + * @returns selector for use internally + */ + #getSelector(selector: string) { + const selectorL = selector.toLowerCase(); + return selectorL === "latest" ? this.latestVerseRef : selectorL; + } +} + +export async function activate() { + logger.info("Extension template is activating!"); + + const quickVerseDataProviderInfoPromise = papi.dataProvider.registerEngine( + "quick-verse.quick-verse", + new QuickVerseDataProviderEngine() + ); + + const unsubPromises = [ + papi.commands.registerCommand( + "extension-template.do-stuff", + (message: string) => { + return `The template did stuff! ${message}`; + } + ), + ]; + + papi.webViews.addWebView({ + componentName: "ExtensionTemplateReact", + contents: extensionTemplateReact, + }); + + papi.webViews.addWebView({ + contentType: 'html' as WebViewContentType.HTML, + contents: extensionTemplateHtml, + }); + + // For now, let's just make things easy and await the data provider promise at the end so we don't hold everything else up + const quickVerseDataProviderInfo = await quickVerseDataProviderInfoPromise; + + return Promise.all( + unsubPromises.map((unsubPromise) => unsubPromise.promise) + ).then(() => { + logger.info("Extension template is finished activating!"); + return papi.util.aggregateUnsubscriberAsyncs( + unsubPromises + .map((unsubPromise) => unsubPromise.unsubscriber) + .concat([quickVerseDataProviderInfo.dispose]) + ); + }); +} + +export async function deactivate() { + logger.info("Extension template is deactivating!"); +} diff --git a/lib/vite-env.d.ts b/lib/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/lib/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..b473362 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2574 @@ +{ + "name": "paranext-extension-template", + "version": "0.0.1", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "paranext-extension-template", + "version": "0.0.1", + "dependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@types/node": "^18.15.11", + "@types/react": "^18.0.28", + "@types/react-dom": "^18.0.11", + "@vitejs/plugin-react": "^3.1.0", + "papi-dts": "file:../paranext-core/lib/papi-dts", + "rollup-plugin-import-manager": "^0.5.3", + "rollup-plugin-string": "^3.0.0", + "typescript": "^4.9.3", + "vite": "^4.2.0" + } + }, + "../paranext-core/lib/papi-dts": { + "version": "0.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", + "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.4.tgz", + "integrity": "sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.4.tgz", + "integrity": "sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.21.4", + "@babel/helper-compilation-targets": "^7.21.4", + "@babel/helper-module-transforms": "^7.21.2", + "@babel/helpers": "^7.21.0", + "@babel/parser": "^7.21.4", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.4", + "@babel/types": "^7.21.4", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.4.tgz", + "integrity": "sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.21.4", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.4.tgz", + "integrity": "sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.21.4", + "@babel/helper-validator-option": "^7.21.0", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", + "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.20.7", + "@babel/types": "^7.21.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz", + "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.21.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", + "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.20.2", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.2", + "@babel/types": "^7.21.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", + "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", + "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", + "dev": true, + "dependencies": { + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.0", + "@babel/types": "^7.21.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.4.tgz", + "integrity": "sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.21.0.tgz", + "integrity": "sha512-f/Eq+79JEu+KUANFks9UZCcvydOOGMgF7jBrcwjHa5jTZD8JivnhCJYvmlhR/WTXBWonDExPoW0eO/CR4QJirA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz", + "integrity": "sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.4.tgz", + "integrity": "sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.21.4", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.21.4", + "@babel/types": "^7.21.4", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.4.tgz", + "integrity": "sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.16.tgz", + "integrity": "sha512-baLqRpLe4JnKrUXLJChoTN0iXZH7El/mu58GE3WIA6/H834k0XWvLRmGLG8y8arTRS9hJJibPnF0tiGhmWeZgw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.16.tgz", + "integrity": "sha512-QX48qmsEZW+gcHgTmAj+x21mwTz8MlYQBnzF6861cNdQGvj2jzzFjqH0EBabrIa/WVZ2CHolwMoqxVryqKt8+Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.16.tgz", + "integrity": "sha512-G4wfHhrrz99XJgHnzFvB4UwwPxAWZaZBOFXh+JH1Duf1I4vIVfuYY9uVLpx4eiV2D/Jix8LJY+TAdZ3i40tDow==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.16.tgz", + "integrity": "sha512-/Ofw8UXZxuzTLsNFmz1+lmarQI6ztMZ9XktvXedTbt3SNWDn0+ODTwxExLYQ/Hod91EZB4vZPQJLoqLF0jvEzA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.16.tgz", + "integrity": "sha512-SzBQtCV3Pdc9kyizh36Ol+dNVhkDyIrGb/JXZqFq8WL37LIyrXU0gUpADcNV311sCOhvY+f2ivMhb5Tuv8nMOQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.16.tgz", + "integrity": "sha512-ZqftdfS1UlLiH1DnS2u3It7l4Bc3AskKeu+paJSfk7RNOMrOxmeFDhLTMQqMxycP1C3oj8vgkAT6xfAuq7ZPRA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.16.tgz", + "integrity": "sha512-rHV6zNWW1tjgsu0dKQTX9L0ByiJHHLvQKrWtnz8r0YYJI27FU3Xu48gpK2IBj1uCSYhJ+pEk6Y0Um7U3rIvV8g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.16.tgz", + "integrity": "sha512-n4O8oVxbn7nl4+m+ISb0a68/lcJClIbaGAoXwqeubj/D1/oMMuaAXmJVfFlRjJLu/ZvHkxoiFJnmbfp4n8cdSw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.16.tgz", + "integrity": "sha512-8yoZhGkU6aHu38WpaM4HrRLTFc7/VVD9Q2SvPcmIQIipQt2I/GMTZNdEHXoypbbGao5kggLcxg0iBKjo0SQYKA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.16.tgz", + "integrity": "sha512-9ZBjlkdaVYxPNO8a7OmzDbOH9FMQ1a58j7Xb21UfRU29KcEEU3VTHk+Cvrft/BNv0gpWJMiiZ/f4w0TqSP0gLA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.16.tgz", + "integrity": "sha512-TIZTRojVBBzdgChY3UOG7BlPhqJz08AL7jdgeeu+kiObWMFzGnQD7BgBBkWRwOtKR1i2TNlO7YK6m4zxVjjPRQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.16.tgz", + "integrity": "sha512-UPeRuFKCCJYpBbIdczKyHLAIU31GEm0dZl1eMrdYeXDH+SJZh/i+2cAmD3A1Wip9pIc5Sc6Kc5cFUrPXtR0XHA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.16.tgz", + "integrity": "sha512-io6yShgIEgVUhExJejJ21xvO5QtrbiSeI7vYUnr7l+v/O9t6IowyhdiYnyivX2X5ysOVHAuyHW+Wyi7DNhdw6Q==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.16.tgz", + "integrity": "sha512-WhlGeAHNbSdG/I2gqX2RK2gfgSNwyJuCiFHMc8s3GNEMMHUI109+VMBfhVqRb0ZGzEeRiibi8dItR3ws3Lk+cA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.16.tgz", + "integrity": "sha512-gHRReYsJtViir63bXKoFaQ4pgTyah4ruiMRQ6im9YZuv+gp3UFJkNTY4sFA73YDynmXZA6hi45en4BGhNOJUsw==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.16.tgz", + "integrity": "sha512-mfiiBkxEbUHvi+v0P+TS7UnA9TeGXR48aK4XHkTj0ZwOijxexgMF01UDFaBX7Q6CQsB0d+MFNv9IiXbIHTNd4g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.16.tgz", + "integrity": "sha512-n8zK1YRDGLRZfVcswcDMDM0j2xKYLNXqei217a4GyBxHIuPMGrrVuJ+Ijfpr0Kufcm7C1k/qaIrGy6eG7wvgmA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.16.tgz", + "integrity": "sha512-lEEfkfsUbo0xC47eSTBqsItXDSzwzwhKUSsVaVjVji07t8+6KA5INp2rN890dHZeueXJAI8q0tEIfbwVRYf6Ew==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.16.tgz", + "integrity": "sha512-jlRjsuvG1fgGwnE8Afs7xYDnGz0dBgTNZfgCK6TlvPH3Z13/P5pi6I57vyLE8qZYLrGVtwcm9UbUx1/mZ8Ukag==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.16.tgz", + "integrity": "sha512-TzoU2qwVe2boOHl/3KNBUv2PNUc38U0TNnzqOAcgPiD/EZxT2s736xfC2dYQbszAwo4MKzzwBV0iHjhfjxMimg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.16.tgz", + "integrity": "sha512-B8b7W+oo2yb/3xmwk9Vc99hC9bNolvqjaTZYEfMQhzdpBsjTvZBlXQ/teUE55Ww6sg//wlcDjOaqldOKyigWdA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.16.tgz", + "integrity": "sha512-xJ7OH/nanouJO9pf03YsL9NAFQBHd8AqfrQd7Pf5laGyyTt/gToul6QYOA/i5i/q8y9iaM5DQFNTgpi995VkOg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "node_modules/@types/estree": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "18.15.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", + "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==", + "dev": true + }, + "node_modules/@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", + "dev": true + }, + "node_modules/@types/react": { + "version": "18.0.35", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.35.tgz", + "integrity": "sha512-6Laome31HpetaIUGFWl1VQ3mdSImwxtFZ39rh059a1MNnKGqBpC88J6NJ8n/Is3Qx7CefDGLgf/KhN/sYCf7ag==", + "dev": true, + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.0.11", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.11.tgz", + "integrity": "sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", + "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==", + "dev": true + }, + "node_modules/@vitejs/plugin-react": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-3.1.0.tgz", + "integrity": "sha512-AfgcRL8ZBhAlc3BFdigClmTUMISmmzHn7sB2h9U1odvc5U/MjWXsAaz18b/WoppUTDBzxOJwo2VdClfUcItu9g==", + "dev": true, + "dependencies": { + "@babel/core": "^7.20.12", + "@babel/plugin-transform-react-jsx-self": "^7.18.6", + "@babel/plugin-transform-react-jsx-source": "^7.19.6", + "magic-string": "^0.27.0", + "react-refresh": "^0.14.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.1.0-beta.0" + } + }, + "node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/browserslist": { + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001478", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001478.tgz", + "integrity": "sha512-gMhDyXGItTHipJj2ApIvR+iVB5hd0KP3svMWWXDvZOmjzJJassGLMfxRkQCSYgGd2gtdL/ReeiyvMSFD1Ss6Mw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/diff": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.360", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.360.tgz", + "integrity": "sha512-EP/jdF15S+l3iSSzgUpUqeazvkbVFXNuVxwwLMVUSie3lUeH1HH70gKe0IS7TASB/0h5QPG2bLMzv2jelSztIQ==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.16.tgz", + "integrity": "sha512-aeSuUKr9aFVY9Dc8ETVELGgkj4urg5isYx8pLf4wlGgB0vTFjxJQdHnNH6Shmx4vYYrOTLCHtRI5i1XZ9l2Zcg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.17.16", + "@esbuild/android-arm64": "0.17.16", + "@esbuild/android-x64": "0.17.16", + "@esbuild/darwin-arm64": "0.17.16", + "@esbuild/darwin-x64": "0.17.16", + "@esbuild/freebsd-arm64": "0.17.16", + "@esbuild/freebsd-x64": "0.17.16", + "@esbuild/linux-arm": "0.17.16", + "@esbuild/linux-arm64": "0.17.16", + "@esbuild/linux-ia32": "0.17.16", + "@esbuild/linux-loong64": "0.17.16", + "@esbuild/linux-mips64el": "0.17.16", + "@esbuild/linux-ppc64": "0.17.16", + "@esbuild/linux-riscv64": "0.17.16", + "@esbuild/linux-s390x": "0.17.16", + "@esbuild/linux-x64": "0.17.16", + "@esbuild/netbsd-x64": "0.17.16", + "@esbuild/openbsd-x64": "0.17.16", + "@esbuild/sunos-x64": "0.17.16", + "@esbuild/win32-arm64": "0.17.16", + "@esbuild/win32-ia32": "0.17.16", + "@esbuild/win32-x64": "0.17.16" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-manager": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/import-manager/-/import-manager-0.3.3.tgz", + "integrity": "sha512-24HG+yEe9zaMo7ltWnJMO381suXUi29OHi4kR7ecmDgoar8G+P0kPMf/692EWJKBkfY/DG/1zQZu47/T/DK7Hw==", + "dev": true, + "dependencies": { + "acorn": "^8.8.2", + "acorn-walk": "^8.2.0", + "colorette": "^2.0.19", + "magic-string": "^0.30.0" + } + }, + "node_modules/import-manager/node_modules/magic-string": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz", + "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/is-core-module": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz", + "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", + "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", + "dev": true + }, + "node_modules/papi-dts": { + "resolved": "../paranext-core/lib/papi-dts", + "link": true + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/react-refresh": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", + "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "dev": true, + "dependencies": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/rollup": { + "version": "3.20.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.20.2.tgz", + "integrity": "sha512-3zwkBQl7Ai7MFYQE0y1MeQ15+9jsi7XxfrqwTb/9EK8D9C9+//EBR4M+CuA1KODRaNbFez/lWxA5vhEGZp4MUg==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-import-manager": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/rollup-plugin-import-manager/-/rollup-plugin-import-manager-0.5.3.tgz", + "integrity": "sha512-ZtrATwGcHmoAaNCyZbeV0MDhCY9H4JGZphlQ03dmCVpXBQdi0DUS+NCjSurr1egUCEaA7h+dWMQ5a4FUeVRHJw==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.2", + "colorette": "^2.0.19", + "diff": "^5.1.0", + "import-manager": "^0.3.3" + } + }, + "node_modules/rollup-plugin-string": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-string/-/rollup-plugin-string-3.0.0.tgz", + "integrity": "sha512-vqyzgn9QefAgeKi+Y4A7jETeIAU1zQmS6VotH6bzm/zmUQEnYkpIGRaOBPY41oiWYV4JyBoGAaBjYMYuv+6wVw==", + "dev": true, + "dependencies": { + "rollup-pluginutils": "^2.4.1" + } + }, + "node_modules/rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dev": true, + "dependencies": { + "estree-walker": "^0.6.1" + } + }, + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/vite": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.2.1.tgz", + "integrity": "sha512-7MKhqdy0ISo4wnvwtqZkjke6XN4taqQ2TBaTccLIpOKv7Vp2h4Y+NpmWCnGDeSvvn45KxvWgGyb0MkHvY1vgbg==", + "dev": true, + "dependencies": { + "esbuild": "^0.17.5", + "postcss": "^8.4.21", + "resolve": "^1.22.1", + "rollup": "^3.18.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@babel/code-frame": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", + "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/compat-data": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.4.tgz", + "integrity": "sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==", + "dev": true + }, + "@babel/core": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.4.tgz", + "integrity": "sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.21.4", + "@babel/helper-compilation-targets": "^7.21.4", + "@babel/helper-module-transforms": "^7.21.2", + "@babel/helpers": "^7.21.0", + "@babel/parser": "^7.21.4", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.4", + "@babel/types": "^7.21.4", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + } + }, + "@babel/generator": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.4.tgz", + "integrity": "sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA==", + "dev": true, + "requires": { + "@babel/types": "^7.21.4", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.4.tgz", + "integrity": "sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.21.4", + "@babel/helper-validator-option": "^7.21.0", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "semver": "^6.3.0" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true + }, + "@babel/helper-function-name": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", + "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", + "dev": true, + "requires": { + "@babel/template": "^7.20.7", + "@babel/types": "^7.21.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-imports": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz", + "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==", + "dev": true, + "requires": { + "@babel/types": "^7.21.4" + } + }, + "@babel/helper-module-transforms": { + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", + "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.20.2", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.2", + "@babel/types": "^7.21.2" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + }, + "@babel/helper-simple-access": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", + "dev": true, + "requires": { + "@babel/types": "^7.20.2" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", + "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", + "dev": true + }, + "@babel/helpers": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", + "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", + "dev": true, + "requires": { + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.0", + "@babel/types": "^7.21.0" + } + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.4.tgz", + "integrity": "sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==", + "dev": true + }, + "@babel/plugin-transform-react-jsx-self": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.21.0.tgz", + "integrity": "sha512-f/Eq+79JEu+KUANFks9UZCcvydOOGMgF7jBrcwjHa5jTZD8JivnhCJYvmlhR/WTXBWonDExPoW0eO/CR4QJirA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.20.2" + } + }, + "@babel/plugin-transform-react-jsx-source": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz", + "integrity": "sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.19.0" + } + }, + "@babel/template": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" + } + }, + "@babel/traverse": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.4.tgz", + "integrity": "sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.21.4", + "@babel/generator": "^7.21.4", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.21.4", + "@babel/types": "^7.21.4", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.4.tgz", + "integrity": "sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + } + }, + "@esbuild/android-arm": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.16.tgz", + "integrity": "sha512-baLqRpLe4JnKrUXLJChoTN0iXZH7El/mu58GE3WIA6/H834k0XWvLRmGLG8y8arTRS9hJJibPnF0tiGhmWeZgw==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.16.tgz", + "integrity": "sha512-QX48qmsEZW+gcHgTmAj+x21mwTz8MlYQBnzF6861cNdQGvj2jzzFjqH0EBabrIa/WVZ2CHolwMoqxVryqKt8+Q==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.16.tgz", + "integrity": "sha512-G4wfHhrrz99XJgHnzFvB4UwwPxAWZaZBOFXh+JH1Duf1I4vIVfuYY9uVLpx4eiV2D/Jix8LJY+TAdZ3i40tDow==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.16.tgz", + "integrity": "sha512-/Ofw8UXZxuzTLsNFmz1+lmarQI6ztMZ9XktvXedTbt3SNWDn0+ODTwxExLYQ/Hod91EZB4vZPQJLoqLF0jvEzA==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.16.tgz", + "integrity": "sha512-SzBQtCV3Pdc9kyizh36Ol+dNVhkDyIrGb/JXZqFq8WL37LIyrXU0gUpADcNV311sCOhvY+f2ivMhb5Tuv8nMOQ==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.16.tgz", + "integrity": "sha512-ZqftdfS1UlLiH1DnS2u3It7l4Bc3AskKeu+paJSfk7RNOMrOxmeFDhLTMQqMxycP1C3oj8vgkAT6xfAuq7ZPRA==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.16.tgz", + "integrity": "sha512-rHV6zNWW1tjgsu0dKQTX9L0ByiJHHLvQKrWtnz8r0YYJI27FU3Xu48gpK2IBj1uCSYhJ+pEk6Y0Um7U3rIvV8g==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.16.tgz", + "integrity": "sha512-n4O8oVxbn7nl4+m+ISb0a68/lcJClIbaGAoXwqeubj/D1/oMMuaAXmJVfFlRjJLu/ZvHkxoiFJnmbfp4n8cdSw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.16.tgz", + "integrity": "sha512-8yoZhGkU6aHu38WpaM4HrRLTFc7/VVD9Q2SvPcmIQIipQt2I/GMTZNdEHXoypbbGao5kggLcxg0iBKjo0SQYKA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.16.tgz", + "integrity": "sha512-9ZBjlkdaVYxPNO8a7OmzDbOH9FMQ1a58j7Xb21UfRU29KcEEU3VTHk+Cvrft/BNv0gpWJMiiZ/f4w0TqSP0gLA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.16.tgz", + "integrity": "sha512-TIZTRojVBBzdgChY3UOG7BlPhqJz08AL7jdgeeu+kiObWMFzGnQD7BgBBkWRwOtKR1i2TNlO7YK6m4zxVjjPRQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.16.tgz", + "integrity": "sha512-UPeRuFKCCJYpBbIdczKyHLAIU31GEm0dZl1eMrdYeXDH+SJZh/i+2cAmD3A1Wip9pIc5Sc6Kc5cFUrPXtR0XHA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.16.tgz", + "integrity": "sha512-io6yShgIEgVUhExJejJ21xvO5QtrbiSeI7vYUnr7l+v/O9t6IowyhdiYnyivX2X5ysOVHAuyHW+Wyi7DNhdw6Q==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.16.tgz", + "integrity": "sha512-WhlGeAHNbSdG/I2gqX2RK2gfgSNwyJuCiFHMc8s3GNEMMHUI109+VMBfhVqRb0ZGzEeRiibi8dItR3ws3Lk+cA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.16.tgz", + "integrity": "sha512-gHRReYsJtViir63bXKoFaQ4pgTyah4ruiMRQ6im9YZuv+gp3UFJkNTY4sFA73YDynmXZA6hi45en4BGhNOJUsw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.16.tgz", + "integrity": "sha512-mfiiBkxEbUHvi+v0P+TS7UnA9TeGXR48aK4XHkTj0ZwOijxexgMF01UDFaBX7Q6CQsB0d+MFNv9IiXbIHTNd4g==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.16.tgz", + "integrity": "sha512-n8zK1YRDGLRZfVcswcDMDM0j2xKYLNXqei217a4GyBxHIuPMGrrVuJ+Ijfpr0Kufcm7C1k/qaIrGy6eG7wvgmA==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.16.tgz", + "integrity": "sha512-lEEfkfsUbo0xC47eSTBqsItXDSzwzwhKUSsVaVjVji07t8+6KA5INp2rN890dHZeueXJAI8q0tEIfbwVRYf6Ew==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.16.tgz", + "integrity": "sha512-jlRjsuvG1fgGwnE8Afs7xYDnGz0dBgTNZfgCK6TlvPH3Z13/P5pi6I57vyLE8qZYLrGVtwcm9UbUx1/mZ8Ukag==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.16.tgz", + "integrity": "sha512-TzoU2qwVe2boOHl/3KNBUv2PNUc38U0TNnzqOAcgPiD/EZxT2s736xfC2dYQbszAwo4MKzzwBV0iHjhfjxMimg==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.16.tgz", + "integrity": "sha512-B8b7W+oo2yb/3xmwk9Vc99hC9bNolvqjaTZYEfMQhzdpBsjTvZBlXQ/teUE55Ww6sg//wlcDjOaqldOKyigWdA==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.16.tgz", + "integrity": "sha512-xJ7OH/nanouJO9pf03YsL9NAFQBHd8AqfrQd7Pf5laGyyTt/gToul6QYOA/i5i/q8y9iaM5DQFNTgpi995VkOg==", + "dev": true, + "optional": true + }, + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + }, + "dependencies": { + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + } + } + }, + "@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "dev": true, + "requires": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "dependencies": { + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + } + } + }, + "@types/estree": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", + "dev": true + }, + "@types/node": { + "version": "18.15.11", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", + "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==", + "dev": true + }, + "@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", + "dev": true + }, + "@types/react": { + "version": "18.0.35", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.35.tgz", + "integrity": "sha512-6Laome31HpetaIUGFWl1VQ3mdSImwxtFZ39rh059a1MNnKGqBpC88J6NJ8n/Is3Qx7CefDGLgf/KhN/sYCf7ag==", + "dev": true, + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-dom": { + "version": "18.0.11", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.11.tgz", + "integrity": "sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==", + "dev": true, + "requires": { + "@types/react": "*" + } + }, + "@types/scheduler": { + "version": "0.16.3", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", + "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==", + "dev": true + }, + "@vitejs/plugin-react": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-3.1.0.tgz", + "integrity": "sha512-AfgcRL8ZBhAlc3BFdigClmTUMISmmzHn7sB2h9U1odvc5U/MjWXsAaz18b/WoppUTDBzxOJwo2VdClfUcItu9g==", + "dev": true, + "requires": { + "@babel/core": "^7.20.12", + "@babel/plugin-transform-react-jsx-self": "^7.18.6", + "@babel/plugin-transform-react-jsx-source": "^7.19.6", + "magic-string": "^0.27.0", + "react-refresh": "^0.14.0" + } + }, + "acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true + }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "browserslist": { + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" + } + }, + "caniuse-lite": { + "version": "1.0.30001478", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001478.tgz", + "integrity": "sha512-gMhDyXGItTHipJj2ApIvR+iVB5hd0KP3svMWWXDvZOmjzJJassGLMfxRkQCSYgGd2gtdL/ReeiyvMSFD1Ss6Mw==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "diff": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.4.360", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.360.tgz", + "integrity": "sha512-EP/jdF15S+l3iSSzgUpUqeazvkbVFXNuVxwwLMVUSie3lUeH1HH70gKe0IS7TASB/0h5QPG2bLMzv2jelSztIQ==", + "dev": true + }, + "esbuild": { + "version": "0.17.16", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.16.tgz", + "integrity": "sha512-aeSuUKr9aFVY9Dc8ETVELGgkj4urg5isYx8pLf4wlGgB0vTFjxJQdHnNH6Shmx4vYYrOTLCHtRI5i1XZ9l2Zcg==", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.17.16", + "@esbuild/android-arm64": "0.17.16", + "@esbuild/android-x64": "0.17.16", + "@esbuild/darwin-arm64": "0.17.16", + "@esbuild/darwin-x64": "0.17.16", + "@esbuild/freebsd-arm64": "0.17.16", + "@esbuild/freebsd-x64": "0.17.16", + "@esbuild/linux-arm": "0.17.16", + "@esbuild/linux-arm64": "0.17.16", + "@esbuild/linux-ia32": "0.17.16", + "@esbuild/linux-loong64": "0.17.16", + "@esbuild/linux-mips64el": "0.17.16", + "@esbuild/linux-ppc64": "0.17.16", + "@esbuild/linux-riscv64": "0.17.16", + "@esbuild/linux-s390x": "0.17.16", + "@esbuild/linux-x64": "0.17.16", + "@esbuild/netbsd-x64": "0.17.16", + "@esbuild/openbsd-x64": "0.17.16", + "@esbuild/sunos-x64": "0.17.16", + "@esbuild/win32-arm64": "0.17.16", + "@esbuild/win32-ia32": "0.17.16", + "@esbuild/win32-x64": "0.17.16" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "import-manager": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/import-manager/-/import-manager-0.3.3.tgz", + "integrity": "sha512-24HG+yEe9zaMo7ltWnJMO381suXUi29OHi4kR7ecmDgoar8G+P0kPMf/692EWJKBkfY/DG/1zQZu47/T/DK7Hw==", + "dev": true, + "requires": { + "acorn": "^8.8.2", + "acorn-walk": "^8.2.0", + "colorette": "^2.0.19", + "magic-string": "^0.30.0" + }, + "dependencies": { + "magic-string": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz", + "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.13" + } + } + } + }, + "is-core-module": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz", + "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "magic-string": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", + "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.13" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "dev": true + }, + "node-releases": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", + "dev": true + }, + "papi-dts": { + "version": "file:../paranext-core/lib/papi-dts" + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "postcss": { + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", + "dev": true, + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "requires": { + "loose-envify": "^1.1.0" + } + }, + "react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "requires": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + } + }, + "react-refresh": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", + "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", + "dev": true + }, + "resolve": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "dev": true, + "requires": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "rollup": { + "version": "3.20.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.20.2.tgz", + "integrity": "sha512-3zwkBQl7Ai7MFYQE0y1MeQ15+9jsi7XxfrqwTb/9EK8D9C9+//EBR4M+CuA1KODRaNbFez/lWxA5vhEGZp4MUg==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "rollup-plugin-import-manager": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/rollup-plugin-import-manager/-/rollup-plugin-import-manager-0.5.3.tgz", + "integrity": "sha512-ZtrATwGcHmoAaNCyZbeV0MDhCY9H4JGZphlQ03dmCVpXBQdi0DUS+NCjSurr1egUCEaA7h+dWMQ5a4FUeVRHJw==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^5.0.2", + "colorette": "^2.0.19", + "diff": "^5.1.0", + "import-manager": "^0.3.3" + } + }, + "rollup-plugin-string": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-string/-/rollup-plugin-string-3.0.0.tgz", + "integrity": "sha512-vqyzgn9QefAgeKi+Y4A7jETeIAU1zQmS6VotH6bzm/zmUQEnYkpIGRaOBPY41oiWYV4JyBoGAaBjYMYuv+6wVw==", + "dev": true, + "requires": { + "rollup-pluginutils": "^2.4.1" + } + }, + "rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dev": true, + "requires": { + "estree-walker": "^0.6.1" + } + }, + "scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "requires": { + "loose-envify": "^1.1.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true + }, + "typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true + }, + "update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "vite": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.2.1.tgz", + "integrity": "sha512-7MKhqdy0ISo4wnvwtqZkjke6XN4taqQ2TBaTccLIpOKv7Vp2h4Y+NpmWCnGDeSvvn45KxvWgGyb0MkHvY1vgbg==", + "dev": true, + "requires": { + "esbuild": "^0.17.5", + "fsevents": "~2.3.2", + "postcss": "^8.4.21", + "resolve": "^1.22.1", + "rollup": "^3.18.0" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..0c68faa --- /dev/null +++ b/package.json @@ -0,0 +1,26 @@ +{ + "name": "paranext-extension-template", + "private": true, + "version": "0.0.1", + "type": "module", + "scripts": { + "build": "vite build", + "start": "vite build --watch", + "lint": "tsc" + }, + "dependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0" + }, + "devDependencies": { + "@types/node": "^18.15.11", + "@types/react": "^18.0.28", + "@types/react-dom": "^18.0.11", + "@vitejs/plugin-react": "^3.1.0", + "papi-dts": "file:../paranext-core/lib/papi-dts", + "rollup-plugin-import-manager": "^0.5.3", + "rollup-plugin-string": "^3.0.0", + "typescript": "^4.9.3", + "vite": "^4.2.0" + } +} diff --git a/public/manifest.json b/public/manifest.json new file mode 100644 index 0000000..43e2ea8 --- /dev/null +++ b/public/manifest.json @@ -0,0 +1,9 @@ +{ + "name": "paranext-extension-template", + "version": "0.0.1", + "description": "Extension template for Paranext. Powered by Vite", + "author": "TJ Couch", + "license": "MIT", + "main": "paranext-extension-template.js", + "activationEvents": [] +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..776d444 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "target": "ESNext", + "useDefineForClassFields": true, + "lib": ["DOM", "DOM.Iterable", "ESNext"], + "allowJs": false, + "skipLibCheck": true, + "esModuleInterop": false, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "ESNext", + "moduleResolution": "Node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + "types": ["papi-dts"] + }, + "include": ["lib"], + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 0000000..9d31e2a --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "composite": true, + "module": "ESNext", + "moduleResolution": "Node", + "allowSyntheticDefaultImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..cbdde3e --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,56 @@ +import { defineConfig } from "vite"; +import react from "@vitejs/plugin-react"; +import path from "path"; +import { string as importString } from "rollup-plugin-string"; +import { importManager } from "rollup-plugin-import-manager"; + +/* + * Glob filename matcher for web views. + * React Web Views should be named .web-view.tsx + * HTML Web Views should be named .web-view.ejs + * - Note: the HTML web views are .ejs files because rollup was not recognizing them to have exports for some reason. + */ +const webViewGlob = "**/*.web-view.(tsx|ejs)"; +const webViewTsxGlob = "**/*.web-view.tsx"; + +/** Modules that Paranext supplies so extensions can use them easily */ +const paranextProvidedModules = ["react", "react-dom/client", "papi"]; + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [ + // use React.createElement + react({ jsxRuntime: "classic" }), + // Remove the Paranext global modules from the imports in React web views because they are provided globally + importManager({ + include: webViewTsxGlob, + units: paranextProvidedModules.map((module) => ({ + module, + actions: "remove", + })), + }), + // Import web view files as strings to pass on the papi + // importString plugin must be after any other plugins that need to transpile these files + { + ...importString({ + include: webViewGlob, + }), + enforce: "post", + }, + ], + build: { + // This project is a library as it is being used in Paranext + lib: { + // The main entry file of the extension + entry: path.resolve(__dirname, "lib/main.ts"), + // The output file name for the extension (file extension is appended) + fileName: "paranext-extension-template", + // Output to es format as Paranext supports it + formats: ["es"], + }, + rollupOptions: { + // Do not bundle papi because it will be imported in Paranext + external: paranextProvidedModules, + }, + }, +}); From f6c550b1fa0adcc99bd3de23f753e939bddffbf1 Mon Sep 17 00:00:00 2001 From: tjcouch-sil Date: Wed, 26 Apr 2023 10:55:57 -0500 Subject: [PATCH 03/61] Added package.json for extension because Paranext needs it --- public/manifest.json | 2 +- public/package.json | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 public/package.json diff --git a/public/manifest.json b/public/manifest.json index 43e2ea8..f4cf0c9 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -2,7 +2,7 @@ "name": "paranext-extension-template", "version": "0.0.1", "description": "Extension template for Paranext. Powered by Vite", - "author": "TJ Couch", + "author": "Paranext", "license": "MIT", "main": "paranext-extension-template.js", "activationEvents": [] diff --git a/public/package.json b/public/package.json new file mode 100644 index 0000000..554b722 --- /dev/null +++ b/public/package.json @@ -0,0 +1,11 @@ +{ + "name": "paranext-extension-template", + "version": "0.0.1", + "description": "Extension template for Paranext. Powered by Vite", + "main": "paranext-extension-template.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "Paranext", + "license": "MIT" +} From a3889246fb19f4b35ffc33c1d64ec4045c598a9e Mon Sep 17 00:00:00 2001 From: tjcouch-sil Date: Wed, 26 Apr 2023 18:02:59 -0500 Subject: [PATCH 04/61] Changed extensions back to commonjs because paranext does not support es modules in production --- package.json | 1 - public/manifest.json | 2 +- public/package.json | 4 +--- vite.config.ts | 4 ++-- 4 files changed, 4 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 0c68faa..9bee481 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,6 @@ "name": "paranext-extension-template", "private": true, "version": "0.0.1", - "type": "module", "scripts": { "build": "vite build", "start": "vite build --watch", diff --git a/public/manifest.json b/public/manifest.json index f4cf0c9..f9e7f25 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -4,6 +4,6 @@ "description": "Extension template for Paranext. Powered by Vite", "author": "Paranext", "license": "MIT", - "main": "paranext-extension-template.js", + "main": "paranext-extension-template.ts", "activationEvents": [] } diff --git a/public/package.json b/public/package.json index 554b722..49d5d12 100644 --- a/public/package.json +++ b/public/package.json @@ -3,9 +3,7 @@ "version": "0.0.1", "description": "Extension template for Paranext. Powered by Vite", "main": "paranext-extension-template.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, + "scripts": {}, "author": "Paranext", "license": "MIT" } diff --git a/vite.config.ts b/vite.config.ts index cbdde3e..c6913c5 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -45,8 +45,8 @@ export default defineConfig({ entry: path.resolve(__dirname, "lib/main.ts"), // The output file name for the extension (file extension is appended) fileName: "paranext-extension-template", - // Output to es format as Paranext supports it - formats: ["es"], + // Output to cjs format as that's what Paranext supports + formats: ["cjs"], }, rollupOptions: { // Do not bundle papi because it will be imported in Paranext From 066cfcaef925fcdad5a329ca54b82ccfb45503f6 Mon Sep 17 00:00:00 2001 From: tjcouch-sil Date: Wed, 26 Apr 2023 18:21:35 -0500 Subject: [PATCH 05/61] Removed data provider info --- lib/extension-template-html.web-view.ejs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/extension-template-html.web-view.ejs b/lib/extension-template-html.web-view.ejs index 143e054..cdb94e9 100644 --- a/lib/extension-template-html.web-view.ejs +++ b/lib/extension-template-html.web-view.ejs @@ -29,13 +29,13 @@ papi.logger.info(input); } - const dataProviderInfoPromise = papi.dataProvider.get( + const dataProviderPromise = papi.dataProvider.get( "hello-someone.greetings" ); async function setupWebView() { - const { dataProvider: greetingsDataProvider } = - await dataProviderInfoPromise; + const greetingsDataProvider = + await dataProviderPromise; // Attach handler for greetings-button const greetingsButton = document.getElementById("greetings-button"); From c5f822eb2534dab1ab6e88a08cfc762c677e10ee Mon Sep 17 00:00:00 2001 From: tjcouch-sil Date: Thu, 27 Apr 2023 17:15:21 -0500 Subject: [PATCH 06/61] Added scss style example --- lib/extension-template-html.web-view.ejs | 10 +- lib/extension-template.web-view.scss | 7 + lib/extension-template.web-view.tsx | 2 +- lib/main.ts | 11 +- package-lock.json | 314 +++++++++++++++++++++++ package.json | 1 + 6 files changed, 335 insertions(+), 10 deletions(-) create mode 100644 lib/extension-template.web-view.scss diff --git a/lib/extension-template-html.web-view.ejs b/lib/extension-template-html.web-view.ejs index cdb94e9..542a4bc 100644 --- a/lib/extension-template-html.web-view.ejs +++ b/lib/extension-template-html.web-view.ejs @@ -1,8 +1,14 @@ - + + + -
Extension Template HTML
+
Extension Template HTML
+
+ + ); +} diff --git a/package.json b/package.json index 16b1e54..45e8193 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,8 @@ "private": true, "version": "0.0.1", "scripts": { - "build:vite": "vite build --config vite/vite-web-view.config.ts && vite build --config vite/vite.config.ts", + "build:vite": "vite build --config vite/vite-web-view.config.ts", + "build:vite2": " vite build --config vite/vite.config.ts", "start:vite": "vite build --watch --config vite/vite.config.ts", "lint": "tsc", "start:core": "cd ../paranext-core && npm run start", diff --git a/vite/vite-web-view.config.ts b/vite/vite-web-view.config.ts index 0994f6e..51c61b1 100644 --- a/vite/vite-web-view.config.ts +++ b/vite/vite-web-view.config.ts @@ -1,5 +1,5 @@ /** - * First Vite build step for transpiling WebViews + * First Vite build step for transpiling TypeScript WebViews */ import { defineConfig } from "vite"; @@ -9,13 +9,13 @@ import { importManager } from "rollup-plugin-import-manager"; import { getFileExtensionByModuleFormat, paranextProvidedModules, - webViewGlob, + webViewTempDir, webViewTsxGlob, } from "./vite.util"; import { globSync } from "glob"; -/** List of WebView files to transpile */ -const webViews = globSync(webViewGlob); +/** List of TypeScript WebView files to transpile */ +const webViews = globSync(webViewTsxGlob, { ignore: "node_modules/**" }); console.log(JSON.stringify(webViews)); /** Tracks which entry file we're working with in determining the file name. */ @@ -39,7 +39,7 @@ export default defineConfig({ // This project is a library as it is being used in Paranext lib: { // List each WebView file as an entry file because each needs to be transpiled - entry: webViews.map((webView) => path.resolve(__dirname, webView)), + entry: webViews.map((webView) => path.resolve(__dirname, "../", webView)), /** * Get the output file name for each WebView. * @@ -59,9 +59,13 @@ export default defineConfig({ // Set up the next call to this function to get the next WebView file entryFileIndex += 1; + // Put transpiled WebViews in a temp folder in the same directory as the original WebView return path.join( - entryName, - `${entryName}.${getFileExtensionByModuleFormat(moduleFormat)}` + webViewFileInfo.dir, + webViewTempDir, + `${webViewFileInfo.name}.${getFileExtensionByModuleFormat( + moduleFormat + )}` ); }, // Output to cjs format as that's what Paranext supports. In production, es modules fail to @@ -76,8 +80,13 @@ export default defineConfig({ // into the main file sourcemap: "inline", // We are placing the built WebView files next to their original files - outDir: "lib", - // We do not want to erase the lib folder! + outDir: "", + // We do not want to erase the entire project! emptyOutDir: false, + // We do not want to copy the public files as we will do that in the next build step + copyPublicDir: false, }, + /* esbuild: { + reserveProps: /ExtensionTemplateReact/, + }, */ }); diff --git a/vite/vite.util.ts b/vite/vite.util.ts index f39f56a..d8e69bf 100644 --- a/vite/vite.util.ts +++ b/vite/vite.util.ts @@ -6,9 +6,12 @@ import { ModuleFormat } from "rollup"; * HTML Web Views should be named .web-view.ejs * - Note: the HTML web views are .ejs files because rollup was not recognizing them to have exports for some reason. */ -export const webViewGlob = "../lib/*.web-view.(tsx|ejs)"; +export const webViewGlob = "**/*.web-view.{tsx,ejs}"; export const webViewTsxGlob = "**/*.web-view.tsx"; +/** Name of adjacent folder used to store WebView files transpiled in the first build step */ +export const webViewTempDir = "temp-vite"; + /** Modules that Paranext supplies so extensions can use them easily */ export const paranextProvidedModules = ["react", "react-dom/client", "papi"]; From 94fd341d4d4c80e1fb41122ca425dfc2b317da19 Mon Sep 17 00:00:00 2001 From: tjcouch-sil Date: Mon, 8 May 2023 11:42:13 -0500 Subject: [PATCH 13/61] Build step 2 grabs web view files built in step 1, excluded imports from web views are now exact matches --- package-lock.json | 803 +++++++++++++++++- package.json | 7 +- patches/import-manager+0.3.3.patch | 221 +++++ .../rollup-plugin-import-manager+0.5.3.patch | 26 + vite/vite-web-view.config.ts | 14 +- vite/vite.config.ts | 65 +- vite/vite.util.ts | 44 +- 7 files changed, 1159 insertions(+), 21 deletions(-) create mode 100644 patches/import-manager+0.3.3.patch create mode 100644 patches/rollup-plugin-import-manager+0.5.3.patch diff --git a/package-lock.json b/package-lock.json index 3bc4325..900d1dd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,19 +7,23 @@ "": { "name": "paranext-extension-template", "version": "0.0.1", + "hasInstallScript": true, "dependencies": { "react": "^18.2.0", "react-dom": "^18.2.0" }, "devDependencies": { + "@rollup/plugin-alias": "^5.0.0", "@types/node": "^18.15.11", "@types/react": "^18.0.28", "@types/react-dom": "^18.0.11", "@vitejs/plugin-react": "^3.1.0", "concurrently": "^8.0.1", "cross-env": "^7.0.3", + "escape-string-regexp": "^5.0.0", "glob": "^10.2.2", "papi-dts": "file:../paranext-core/lib/papi-dts", + "patch-package": "^7.0.0", "rollup-plugin-import-manager": "^0.5.3", "rollup-plugin-string": "^3.0.0", "sass": "^1.62.1", @@ -898,6 +902,26 @@ "node": ">=14" } }, + "node_modules/@rollup/plugin-alias": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-alias/-/plugin-alias-5.0.0.tgz", + "integrity": "sha512-l9hY5chSCjuFRPsnRm16twWBiSApl2uYFLsepQYwtBuAxNMQ/1dJqADld40P0Jkqm65GRTLy/AC6hnpVebtLsA==", + "dev": true, + "dependencies": { + "slash": "^4.0.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, "node_modules/@rollup/pluginutils": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", @@ -989,6 +1013,12 @@ "vite": "^4.1.0-beta.0" } }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true + }, "node_modules/acorn": { "version": "8.8.2", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", @@ -1044,6 +1074,15 @@ "node": ">= 8" } }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -1142,6 +1181,15 @@ "node": ">=4" } }, + "node_modules/chalk/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -1169,6 +1217,21 @@ "fsevents": "~2.3.2" } }, + "node_modules/ci-info": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -1204,6 +1267,12 @@ "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", "dev": true }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, "node_modules/concurrently": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.0.1.tgz", @@ -1467,12 +1536,15 @@ } }, "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, "engines": { - "node": ">=0.8.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/estree-walker": { @@ -1493,6 +1565,15 @@ "node": ">=8" } }, + "node_modules/find-yarn-workspace-root": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", + "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "dev": true, + "dependencies": { + "micromatch": "^4.0.2" + } + }, "node_modules/foreground-child": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", @@ -1509,6 +1590,27 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, "node_modules/fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", @@ -1590,6 +1692,12 @@ "node": ">=4" } }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -1641,6 +1749,22 @@ "node": ">=12" } }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -1665,6 +1789,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -1704,6 +1843,18 @@ "node": ">=0.12.0" } }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -1757,6 +1908,27 @@ "node": ">=6" } }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/klaw-sync": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", + "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11" + } + }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -1795,6 +1967,19 @@ "node": ">=12" } }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, "node_modules/minimatch": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.0.tgz", @@ -1810,6 +1995,15 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/minipass": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", @@ -1858,10 +2052,170 @@ "node": ">=0.10.0" } }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/papi-dts": { "resolved": "../paranext-core/lib/papi-dts", "link": true }, + "node_modules/patch-package": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-7.0.0.tgz", + "integrity": "sha512-eYunHbnnB2ghjTNc5iL1Uo7TsGMuXk0vibX3RFcE/CdVdXzmdbMsG/4K4IgoSuIkLTI5oHrMQk4+NkFqSed0BQ==", + "dev": true, + "dependencies": { + "@yarnpkg/lockfile": "^1.1.0", + "chalk": "^4.1.2", + "ci-info": "^3.7.0", + "cross-spawn": "^7.0.3", + "find-yarn-workspace-root": "^2.0.0", + "fs-extra": "^9.0.0", + "klaw-sync": "^6.0.0", + "minimist": "^1.2.6", + "open": "^7.4.2", + "rimraf": "^2.6.3", + "semver": "^5.6.0", + "slash": "^2.0.0", + "tmp": "^0.0.33", + "yaml": "^2.2.2" + }, + "bin": { + "patch-package": "index.js" + }, + "engines": { + "node": ">=14", + "npm": ">5" + } + }, + "node_modules/patch-package/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/patch-package/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/patch-package/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/patch-package/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/patch-package/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/patch-package/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/patch-package/node_modules/slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/patch-package/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -2020,6 +2374,60 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/rollup": { "version": "3.20.2", "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.20.2.tgz", @@ -2151,6 +2559,18 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/source-map-js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", @@ -2244,6 +2664,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -2293,6 +2725,15 @@ "node": ">=4.2.0" } }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/update-browserslist-db": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", @@ -2484,6 +2925,12 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -2499,6 +2946,15 @@ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true }, + "node_modules/yaml": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz", + "integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, "node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", @@ -3061,6 +3517,15 @@ "dev": true, "optional": true }, + "@rollup/plugin-alias": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-alias/-/plugin-alias-5.0.0.tgz", + "integrity": "sha512-l9hY5chSCjuFRPsnRm16twWBiSApl2uYFLsepQYwtBuAxNMQ/1dJqADld40P0Jkqm65GRTLy/AC6hnpVebtLsA==", + "dev": true, + "requires": { + "slash": "^4.0.0" + } + }, "@rollup/pluginutils": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", @@ -3137,6 +3602,12 @@ "react-refresh": "^0.14.0" } }, + "@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true + }, "acorn": { "version": "8.8.2", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", @@ -3174,6 +3645,12 @@ "picomatch": "^2.0.4" } }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true + }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -3231,6 +3708,14 @@ "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + } } }, "chokidar": { @@ -3249,6 +3734,12 @@ "readdirp": "~3.6.0" } }, + "ci-info": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "dev": true + }, "cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -3281,6 +3772,12 @@ "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", "dev": true }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, "concurrently": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.0.1.tgz", @@ -3471,9 +3968,9 @@ "dev": true }, "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true }, "estree-walker": { @@ -3491,6 +3988,15 @@ "to-regex-range": "^5.0.1" } }, + "find-yarn-workspace-root": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", + "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "dev": true, + "requires": { + "micromatch": "^4.0.2" + } + }, "foreground-child": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", @@ -3501,6 +4007,24 @@ "signal-exit": "^4.0.1" } }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, "fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", @@ -3554,6 +4078,12 @@ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -3598,6 +4128,22 @@ } } }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -3616,6 +4162,12 @@ "has": "^1.0.3" } }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true + }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -3643,6 +4195,15 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -3676,6 +4237,25 @@ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "klaw-sync": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", + "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11" + } + }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -3708,6 +4288,16 @@ "@jridgewell/sourcemap-codec": "^1.4.13" } }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, "minimatch": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.0.tgz", @@ -3717,6 +4307,12 @@ "brace-expansion": "^2.0.1" } }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true + }, "minipass": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", @@ -3747,9 +4343,125 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dev": true, + "requires": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true + }, "papi-dts": { "version": "file:../paranext-core/lib/papi-dts" }, + "patch-package": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-7.0.0.tgz", + "integrity": "sha512-eYunHbnnB2ghjTNc5iL1Uo7TsGMuXk0vibX3RFcE/CdVdXzmdbMsG/4K4IgoSuIkLTI5oHrMQk4+NkFqSed0BQ==", + "dev": true, + "requires": { + "@yarnpkg/lockfile": "^1.1.0", + "chalk": "^4.1.2", + "ci-info": "^3.7.0", + "cross-spawn": "^7.0.3", + "find-yarn-workspace-root": "^2.0.0", + "fs-extra": "^9.0.0", + "klaw-sync": "^6.0.0", + "minimist": "^1.2.6", + "open": "^7.4.2", + "rimraf": "^2.6.3", + "semver": "^5.6.0", + "slash": "^2.0.0", + "tmp": "^0.0.33", + "yaml": "^2.2.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, "path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -3858,6 +4570,50 @@ "supports-preserve-symlinks-flag": "^1.0.0" } }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, "rollup": { "version": "3.20.2", "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.20.2.tgz", @@ -3958,6 +4714,12 @@ "integrity": "sha512-uUWsN4aOxJAS8KOuf3QMyFtgm1pkb6I+KRZbRF/ghdf5T7sM+B1lLLzPDxswUjkmHyxQAVzEgG35E3NzDM9GVw==", "dev": true }, + "slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true + }, "source-map-js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", @@ -4025,6 +4787,15 @@ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -4058,6 +4829,12 @@ "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, "update-browserslist-db": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", @@ -4164,6 +4941,12 @@ } } }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -4176,6 +4959,12 @@ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true }, + "yaml": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz", + "integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==", + "dev": true + }, "yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", diff --git a/package.json b/package.json index 45e8193..5074b25 100644 --- a/package.json +++ b/package.json @@ -2,27 +2,32 @@ "name": "paranext-extension-template", "private": true, "version": "0.0.1", + "type": "module", "scripts": { "build:vite": "vite build --config vite/vite-web-view.config.ts", "build:vite2": " vite build --config vite/vite.config.ts", "start:vite": "vite build --watch --config vite/vite.config.ts", "lint": "tsc", "start:core": "cd ../paranext-core && npm run start", - "start": "cross-env MAIN_ARGS=\"--extensions $INIT_CWD/dist\" concurrently \"npm:start:vite\" \"npm:start:core\"" + "start": "cross-env MAIN_ARGS=\"--extensions $INIT_CWD/dist\" concurrently \"npm:start:vite\" \"npm:start:core\"", + "postinstall": "patch-package" }, "dependencies": { "react": "^18.2.0", "react-dom": "^18.2.0" }, "devDependencies": { + "@rollup/plugin-alias": "^5.0.0", "@types/node": "^18.15.11", "@types/react": "^18.0.28", "@types/react-dom": "^18.0.11", "@vitejs/plugin-react": "^3.1.0", "concurrently": "^8.0.1", "cross-env": "^7.0.3", + "escape-string-regexp": "^5.0.0", "glob": "^10.2.2", "papi-dts": "file:../paranext-core/lib/papi-dts", + "patch-package": "^7.0.0", "rollup-plugin-import-manager": "^0.5.3", "rollup-plugin-string": "^3.0.0", "sass": "^1.62.1", diff --git a/patches/import-manager+0.3.3.patch b/patches/import-manager+0.3.3.patch new file mode 100644 index 0000000..3c59295 --- /dev/null +++ b/patches/import-manager+0.3.3.patch @@ -0,0 +1,221 @@ +diff --git a/node_modules/import-manager/README.md b/node_modules/import-manager/README.md +index 5754a5f..7451c36 100644 +--- a/node_modules/import-manager/README.md ++++ b/node_modules/import-manager/README.md +@@ -49,7 +49,7 @@ Methods, callable from manager instance. + Analyzes the source and stores all import statements as unit objects in the [imports object](#imports-object). + + ##### `selectModByName(name, type, allowNull)` +-Searches `this.imports` for the given module _name_. If _type_ is provided (`cjs`/`dynamic`/`es6`), it only searches for the module in that category. If _allowNull_ `false` the module must be found or a [`MatchError`](#matcherror ++Searches `this.imports` for the given module _name_ (`String` | `RegExp`). If _type_ is provided (`cjs`/`dynamic`/`es6`), it only searches for the module in that category. If _allowNull_ `false` the module must be found or a [`MatchError`](#matcherror + ) is thrown. + + ##### `selectModById(id, allowNull)` +@@ -100,6 +100,8 @@ Methods callable from a unit object. + ##### `renameModule(name, modType)` + Changes the _name_ -> module (path). _modType_ can be `"string"` which adds quotation marks around _name_ or `"raw"`, which doesn't and can be used to pass variables if valid for the import type. + ++EDIT: name can alternatively be (moduleSourceRaw: string) => string where moduleSourceRaw is the module's source code including quotes if _modType_ is `"string"`. ++ + ##### `addDefaultMembers(names)` + _names_ is an array of strings (even for the most common case of a single member) of default members to add to the unit. _[es6 only]_ + +diff --git a/node_modules/import-manager/cjs/import-manager.cjs b/node_modules/import-manager/cjs/import-manager.cjs +index 7e54a1e..c6766a3 100644 +--- a/node_modules/import-manager/cjs/import-manager.cjs ++++ b/node_modules/import-manager/cjs/import-manager.cjs +@@ -79,21 +79,27 @@ class ImportManagerUnitMethods { + + /** + * Changes the module part of a import statement. +- * @param {string} name - The new module part/path. ++ * @param {string | (moduleSourceRaw: string) => string} name - The new module part/path or a function ++ * that receives the module's raw source code (including quotes if present) and returns the new module part/path. + * @param {*} modType - Module type (literal|raw). ++ * EDIT: Added support for name (aka rename in rollup plugin action) to be a function + */ + renameModule(name, modType) { +- if (modType === "string") { +- if (!this.unit.module.quotes) { +- this.unit.module.quotes = "\""; ++ const isNameAFn = typeof name === 'function'; ++ ++ if (!isNameAFn) { ++ if (modType === "string") { ++ if (!this.unit.module.quotes) { ++ this.unit.module.quotes = "\""; ++ } ++ const q = this.unit.module.quotes; ++ name = q + name + q; ++ } else if (modType !== "raw") { ++ throw new TypeError(`Unknown modType '${modType}'. Valid types are 'string' and 'raw'.`); + } +- const q = this.unit.module.quotes; +- name = q + name + q; +- } else if (modType !== "raw") { +- throw new TypeError(`Unknown modType '${modType}'. Valid types are 'string' and 'raw'.`); + } + +- this.unit.code.overwrite(this.unit.module.start, this.unit.module.end, name); ++ this.unit.code.overwrite(this.unit.module.start, this.unit.module.end, isNameAFn ? name(this.unit.module.sourceRaw) : name); + + if (this.unit.type === "es6") { + this.updateUnit(); +@@ -700,7 +706,9 @@ class ImportManager { + start: node.source.start - node.start, + end: node.source.end - node.start, + type: "string", +- quotes: node.source.raw.at(0) ++ quotes: node.source.raw.at(0), ++ // EDIT: added module's raw source code ++ sourceRaw: node.source.raw + }; + + +@@ -732,7 +740,9 @@ class ImportManager { + const module = { + name: importObject.source.value.split("/").at(-1) || "N/A", + start: importObject.source.start - node.start, +- end: importObject.source.end - node.start ++ end: importObject.source.end - node.start, ++ // EDIT: added module's raw source code ++ sourceRaw: importObject.source.raw + }; + + if (importObject.source.type === "Literal") { +@@ -768,7 +778,9 @@ class ImportManager { + const module = { + name: modulePart.value.split("/").at(-1) || "N/A", + start: modulePart.start - node.start, +- end: modulePart.end - node.start ++ end: modulePart.end - node.start, ++ // EDIT: added module's raw source code ++ sourceRaw: modulePart.raw + }; + + if (modulePart.type === "Literal") { +@@ -829,7 +841,7 @@ class ImportManager { + + /** + * Selects a unit by its module name. +- * @param {string} name - Module Name. ++ * @param {string|RegExp} name - Module Name. + * @param {string|string[]} [type] - "cjs", "dynamic", "es6" one as a string or multiple as array of strings + * @param {boolean} allowNull - If false the module must be found or a MatchError is thrown. + * @returns {Object} - An explicit unit. +@@ -867,7 +879,8 @@ class ImportManager { + + // filter for unit name + const units = unitList.filter(unit => { +- const match = unit.module.name.indexOf(name) > -1; ++ // EDIT: unit.module can now be a string or a regex ++ const match = name instanceof RegExp ? unit.module.name !== undefined && name.test(unit.module.name) : unit.module.name.indexOf(name) > -1; + + // ignore deleted units + if (match && unit.module.name.match(/^\(deleted\)/)) { +diff --git a/node_modules/import-manager/cjs/import-manager.cjs.map b/node_modules/import-manager/cjs/import-manager.cjs.map +index 7c48792..74fad9d 100644 +--- a/node_modules/import-manager/cjs/import-manager.cjs.map ++++ b/node_modules/import-manager/cjs/import-manager.cjs.map +@@ -1 +1 @@ +-{"version":3,"file":"import-manager.cjs","sources":["../src/errors.js","../src/unit-methods.js","../src/core.js"],"sourcesContent":["/**\n * Custom error to tell the user, that it is\n * not possible to select a specific unit.\n */\nclass MatchError extends Error {\n constructor(message) {\n super(message);\n this.name = \"MatchError\";\n }\n}\n\n/**\n * Custom error to abort the building process\n * for retrieving information.\n */\nclass DebuggingError extends Error {\n constructor(message) {\n if (typeof message !== \"string\") {\n message = JSON.stringify(message, null, 4);\n }\n super(message);\n this.name = \"DebuggingError\";\n }\n}\n\nexport { DebuggingError, MatchError };\n","import { DebuggingError, MatchError } from \"./errors.js\";\n\n/**\n * Creates methods for unit manipulation to\n * be attached to a requested unit.\n */\nexport default class ImportManagerUnitMethods {\n\n /**\n * Stores the handed over unit and creates\n * an update method.\n * @param {Object} unit - The unit a user requests \n * @param {*} es6NodeToUnit - Method to analyze a \n */\n constructor(unit, es6NodeToUnit) {\n this.unit = unit;\n\n // After a change in the code of a es6 unit is made\n // it gets analyzed again, which is very verbose,\n // but prevents errors. The \"MagicString\" does not\n // contain multiple changes at a time. The analysis\n // function is the same as for the initial file\n // analyses and gets handed over by the main class.\n\n this.updateUnit = () => {\n\n const unit = es6NodeToUnit(\n this.unit.code.toString(),\n this.unit.start,\n this.unit.end\n );\n\n Object.assign(this.unit, unit);\n\n };\n }\n\n\n /**\n * Makes sure, that the processed unit is of type 'es6'. \n */\n #ES6only() {\n if (this.unit.type !== \"es6\") {\n throw new Error(\"This method is only available for ES6 imports.\");\n }\n }\n\n\n /**\n * Changes the module part of a import statement.\n * @param {string} name - The new module part/path.\n * @param {*} modType - Module type (literal|raw).\n */\n renameModule(name, modType) {\n if (modType === \"string\") {\n if (!this.unit.module.quotes) {\n this.unit.module.quotes = \"\\\"\";\n }\n const q = this.unit.module.quotes;\n name = q + name + q;\n } else if (modType !== \"raw\") {\n throw new TypeError(`Unknown modType '${modType}'. Valid types are 'string' and 'raw'.`);\n }\n \n this.unit.code.overwrite(this.unit.module.start, this.unit.module.end, name);\n\n if (this.unit.type === \"es6\") {\n this.updateUnit();\n }\n }\n\n\n /**\n * Adds default members to the import statement.\n * @param {string[]} names - A list of default members to add.\n */\n addDefaultMembers(names) {\n this.#ES6only();\n\n let start; \n let defStr;\n let memberPart = null;\n\n // handle the case if default members already exist\n if (this.unit.defaultMembers.count > 0) {\n start = this.unit.defaultMembers.entities.at(-1).absEnd;\n defStr = this.unit.defaultMembers.separator \n + names.join(this.unit.defaultMembers.separator);\n this.unit.code.appendRight(start, defStr);\n }\n\n // handle the case if default members do not exist, \n // and also no non default members (the addition\n // needs to be appended left, otherwise is\n // interferes with the module part)\n else if (this.unit.members.count === 0) {\n start = this.unit.module.start;\n defStr = names.join(this.unit.members.separator);\n memberPart = defStr;\n defStr += \" from \";\n this.unit.code.appendLeft(start, defStr);\n }\n\n // handle the case if default members do not exist, \n // but non default members\n else {\n start = this.unit.members.start;\n defStr = names.join(this.unit.defaultMembers.separator)\n + this.unit.members.separator;\n this.unit.code.appendRight(start, defStr);\n }\n \n this.updateUnit(memberPart);\n }\n\n\n /**\n * Adds non default members to the import statement.\n * @param {string[]} names - A list of members to add. \n */\n addMembers(names) {\n this.#ES6only();\n\n let start; \n let memStr;\n let memberPart = null;\n \n // handle the case if members already exist\n if (this.unit.members.count > 0) {\n start = this.unit.members.entities.at(-1).absEnd;\n memStr = this.unit.members.separator \n + names.join(this.unit.members.separator);\n this.unit.code.appendRight(start, memStr);\n }\n\n // handle the case if members do not exist, \n // and also no default members (the addition\n // needs to be appended left, otherwise is\n // interferes with the module part)\n else if (this.unit.defaultMembers.count === 0) {\n start = this.unit.module.start;\n memStr = \"{ \"\n + names.join(this.unit.members.separator)\n + \" }\";\n memberPart = memStr;\n memStr += \" from \";\n this.unit.code.appendLeft(start, memStr);\n }\n\n // handle the case if members do not exist, \n // but default members\n else {\n start = this.unit.defaultMembers.end;\n memStr = this.unit.defaultMembers.separator\n + \"{ \"\n + names.join(this.unit.members.separator)\n + \" }\";\n this.unit.code.appendRight(start, memStr);\n }\n\n this.updateUnit(memberPart);\n }\n\n\n /**\n * Internal helper method to get the member type.\n * The user input distinguishes between member/defaultMember\n * and the plural versions of them. To prevent confusion in the\n * process of selecting the different styles in the unit, this\n * methods adds an \"s\" to the given string if missing and selects\n * the requested type.\n * @param {*} memberType \n * @returns \n */\n #getType(memberType) {\n if (memberType.at(-1) !== \"s\") {\n memberType += \"s\";\n }\n return this.unit[memberType];\n }\n\n\n /**\n * Internal helper method to find a specific member\n * or default member.\n * @param {string} memberType - member/defaultMember. \n * @param {string} name - (default) member name. \n * @returns {Object} - (default) member object.\n */\n #findMember(memberType, name) {\n if (!name) {\n throw new Error(`${memberType} name must be set.`);\n }\n const filtered = this.#getType(memberType).entities.filter(m => m.name === name);\n if (filtered.length !== 1) {\n throw new MatchError(`Unable to locate ${memberType} with name '${name}'`);\n }\n return filtered[0];\n }\n\n\n /**\n * Removes a (default) member.\n * @param {string} memberType - member|defaultMember\n * @param {string} name - Name of the (default) member \n */\n removeMember(memberType, name) {\n this.#ES6only();\n\n const member = this.#findMember(memberType, name);\n\n if (this.#getType(memberType).count === 1) {\n this.removeMembers(memberType);\n } \n\n else {\n let start;\n let end;\n \n if (member.next) {\n start = member.start;\n end = member.next;\n } else if (member.last) {\n start = member.last;\n end = member.absEnd;\n } else {\n start = member.start;\n end = member.absEnd;\n }\n\n this.unit.code.remove(start, end); \n this.updateUnit();\n\n }\n }\n\n\n /**\n * Removes an entire group of members or default members.\n * @param {string} membersType - member(s)|defaultMember(s) \n */\n removeMembers(membersType) {\n this.#ES6only();\n\n const isDefault = membersType.indexOf(\"default\") > -1;\n\n const members = this.#getType(membersType);\n const others = this.#getType(isDefault ? \"members\" : \"defaultMembers\");\n\n let memberPart = null;\n if (others.count > 0) {\n \n const start = !isDefault \n ? this.unit.defaultMembers.entities.at(-1).end\n : members.start;\n\n this.unit.code.remove(start, members.end);\n }\n\n else {\n this.unit.code.remove(members.start, this.unit.module.start);\n memberPart = \"\";\n }\n\n this.updateUnit(memberPart);\n }\n\n\n /**\n * Renames a single (default) member. The alias\n * can be kept or overwritten. \n * @param {string} memberType - member|defaultMember \n * @param {string} name - The (default) member to rename.\n * @param {string} newName - The new name of the (default) member.\n * @param {boolean} keepAlias - True if the alias shall be untouched. \n */\n renameMember(memberType, name, newName, keepAlias) {\n this.#ES6only();\n\n const member = this.#findMember(memberType, name);\n let end;\n\n if (keepAlias) {\n end = member.end;\n } else {\n end = member.absEnd;\n }\n \n this.unit.code.overwrite(member.start, end, newName);\n this.updateUnit();\n }\n\n\n /**\n * Changes the alias. Changing can be renaming\n * setting it initially or removing. \n * @param {string} memberType - member|defaultMember\n * @param {string} name - (default) member name\n * @param {string} [set] - A new name or nothing for removal\n */\n setAlias(memberType, name, set) {\n this.#ES6only();\n \n if (memberType === \"defaultMember\") {\n if (name !== \"*\") {\n throw new TypeError(\"The modification of a default member alias is only possible if the module is an asterisk. For other changes use the 'rename' method.\");\n } else if (!set) {\n throw new TypeError(\"Removing the alias of an asterisk is invalid. Use the 'rename' method for other changes.\");\n }\n }\n const aliasStr = set ? `${name} as ${set}` : name;\n this.renameMember(memberType, name, aliasStr, false);\n this.updateUnit();\n }\n\n\n /**\n * Method to call after a unit was completely removed\n * or replaced, to prevent matching it again afterwards.\n */\n makeUntraceable() {\n this.unit.id = `(deleted) ${this.unit.id}`;\n this.unit.hash = `(deleted) ${this.unit.hash}`;\n this.unit.module.name = `(deleted) ${this.unit.module.name}`;\n }\n\n\n /**\n * Debugging method to stop the building process\n * and list this unit properties.\n */\n log(error=true) {\n const unit = { ...this.unit };\n delete unit.methods;\n unit.code = [ unit.code.toString() ];\n if (error) {\n throw new DebuggingError(unit);\n }\n return unit;\n }\n}\n","/**\n * [ImportManager]{@link https://github.com/UmamiAppearance/ImportManager}\n *\n * The core class for the rollup-plugin-import-manager,\n * which can never the less be used standalone. \n * It handles code analysis, creates units from import\n * statements, attaches methods to the units and more.\n * \n * @version 0.3.3\n * @author UmamiAppearance [mail@umamiappearance.eu]\n * @license MIT\n * @see https://github.com/UmamiAppearance/rollup-plugin-import-manager\n */\n\nimport ImportManagerUnitMethods from \"./unit-methods.js\";\nimport { DebuggingError, MatchError } from \"./errors.js\";\nimport { parse } from \"acorn\";\nimport { full as fullWalk } from \"acorn-walk\"; \nimport MagicString from \"magic-string\";\nimport { bold, yellow } from \"colorette\";\nimport { EOL } from \"os\";\n\n\nclass ImportManager {\n\n /**\n * The constructor creates a class import\n * object and kicks of the code analysis.\n * @param {string} source - The unmodified source code.\n * @param {string} filename - The path/name of the input file (used for hash generation). \n * @param {object} [warnSpamProtection] - A Set which contains all previously printed warning hashes.\n * @param {boolean} [warnings=true] - Pass false to suppress warning messages.\n * @param {object} [pluginInstance] - Rollup plugin instance if used as a plugin.\n */\n constructor(source, filename, warnSpamProtection=new Set(), warnings=true, pluginInstance=null) {\n\n if (!source) {\n source=\"\";\n }\n\n if (!filename) {\n filename = String(simpleHash(source));\n }\n\n this.scopeMulti = 1000;\n\n this.imports = {\n es6: {\n count: 0,\n idScope: 1 * this.scopeMulti,\n searched: false,\n units: []\n },\n dynamic: {\n count: 0,\n idScope: 2 * this.scopeMulti,\n searched: false,\n units: []\n },\n cjs: {\n count: 0,\n idScope: 3 * this.scopeMulti,\n searched: false,\n units: []\n }\n\n };\n\n // id scope lookup table with the associated type\n this.idTypes = Object.fromEntries(Object.entries(this.imports).map(([k, v]) => [v.idScope, k]));\n\n this.code = new MagicString(source);\n\n this.hashList = {};\n this.filename = filename.split(process.cwd()).at(1);\n this.warnSpamProtection = warnSpamProtection;\n \n this.parsedCode = parse(source, {\n ecmaVersion: \"latest\",\n sourceType: \"module\"\n });\n\n if (!warnings) {\n this.warning = () => {\n return;\n };\n }\n \n else {\n if (pluginInstance) {\n this.warn = pluginInstance.warn;\n } else {\n this.warn = msg => {\n console.warn(\n bold(yellow(`ImportManager: ${msg}`))\n );\n };\n }\n }\n \n this.analyze();\n }\n\n\n /**\n * Analyzes the source and stores all import\n * statements as unit objects in the object\n * \"this.imports\"\n */\n analyze() {\n \n let cjsId = this.imports.cjs.idScope;\n let cjsIndex = 0;\n\n let dynamicId = this.imports.dynamic.idScope;\n let dynamicIndex = 0;\n\n let es6Id = this.imports.es6.idScope;\n let es6Index = 0;\n\n this.parsedCode.body.forEach(node => {\n\n if (node.type === \"ImportDeclaration\") {\n const unit = this.#es6NodeToUnit(node);\n unit.id = es6Id ++;\n unit.index = es6Index ++;\n unit.hash = this.#makeHash(unit);\n this.imports.es6.units.push(unit);\n this.imports.es6.count ++;\n }\n \n else if (node.type === \"VariableDeclaration\" ||\n node.type === \"ExpressionStatement\")\n {\n fullWalk(node, part => {\n\n if (part.type === \"ImportExpression\") {\n const unit = this.#dynamicNodeToUnit(node, part);\n unit.id = dynamicId ++;\n unit.index = dynamicIndex ++;\n unit.hash = this.#makeHash(unit);\n this.imports.dynamic.units.push(unit);\n this.imports.dynamic.count ++;\n }\n \n else if (part.type === \"Identifier\" && part.name === \"require\") {\n const unit = this.#cjsNodeToUnit(node);\n unit.id = cjsId ++;\n unit.index = cjsIndex ++;\n unit.hash = this.#makeHash(unit);\n this.imports.cjs.units.push(unit);\n this.imports.cjs.count ++;\n }\n\n });\n }\n });\n }\n\n /**\n * Helper method to generate a very simple hash\n * from the unit properties.\n * @param {Object} unit - Unit to generate a hash from. \n * @returns {string} - a hash as a string \n */\n #makeHash(unit) {\n\n const makeInput = (unit) => {\n \n const joinProps = list => {\n list.forEach(member => {\n inputStr += member.name;\n if (member.alias) {\n inputStr += member.alias.name;\n }\n });\n }; \n\n let inputStr = unit.module.name\n + unit.type\n + this.filename;\n \n if (unit.members) {\n joinProps(unit.members.entities);\n }\n\n if (unit.defaultMembers) {\n joinProps(unit.defaultMembers.entities);\n }\n\n return inputStr;\n };\n\n const input = makeInput(unit);\n let hash = String(simpleHash(input));\n\n // handle duplicates\n if (hash in this.hashList) {\n \n if (unit.module.name !== \"N/A\") {\n this.warning(`It seems like there are multiple imports of module '${unit.module.name}'. You should examine that.`);\n }\n \n for (let nr=2;; nr++) {\n const nHash = `${hash}#${nr}`;\n if (!(nHash in this.hashList)) {\n hash = nHash;\n break;\n }\n }\n }\n \n this.hashList[hash] = unit.id;\n\n return hash;\n }\n\n\n /**\n * Method to generate a unit object from an acorn\n * node, originated from an ES6 Import Statement. \n * @param {Object|string} node - acorn node or es6 import statement string. \n * @param {number} [oStart] - For updating units the original start index has to be passed. \n * @param {number} [oEnd] - For updating units the original end index has to be passed.\n * @returns {object} - Import Manager Unit Object.\n */\n #es6NodeToUnit(node, oStart, oEnd) {\n\n let code;\n if (typeof node === \"string\") {\n code = node;\n try {\n node = parse(node, {\n ecmaVersion: \"latest\",\n sourceType: \"module\"\n }).body.at(0);\n } catch(e) {\n if (e instanceof SyntaxError) {\n let msg = `${EOL}${EOL}Generated Code Snippet${EOL}----------------------${EOL}`;\n let { line, column } = e.loc;\n line --;\n code.toString().split(EOL).forEach((l, i) => {\n msg += `l${EOL}`;\n if (line === i) {\n msg += bold(\" \".repeat(column) + `^${EOL}`);\n }\n });\n\n\n throw new SyntaxError(msg);\n }\n throw new Error(e);\n }\n } else {\n code = this.code.slice(node.start, node.end);\n }\n \n const mem = {\n defaultMembers: {\n count: 0,\n entities: []\n },\n members: {\n count: 0,\n entities: []\n }\n };\n\n if (node.specifiers) {\n for (const spec of node.specifiers) {\n \n const memType = spec.type === \"ImportSpecifier\" ? \"members\" : \"defaultMembers\";\n const index = mem[memType].count;\n const hasAlias = spec.local.start !== spec.start;\n\n const start = spec.start - node.start;\n let end;\n if (!hasAlias) {\n end = spec.end - node.start;\n } else {\n end = (memType === \"members\") ? spec.imported.end-node.start : start+1;\n }\n const name = code.slice(start, end);\n \n\n const member = {\n index,\n name,\n start,\n end,\n absEnd: spec.end - node.start\n };\n\n if (hasAlias) {\n member.alias = {\n name: spec.local.name,\n start: spec.local.start - node.start,\n end: spec.local.end - node.start\n };\n }\n\n if (index > 0) {\n member.last = mem[memType].entities[index-1].absEnd;\n mem[memType].entities[index-1].next = member.start;\n }\n \n mem[memType].entities.push(member);\n mem[memType].count ++;\n\n }\n }\n\n if (mem.members.count > 0) {\n const nonDefaultMatch = code.match(/{[\\s\\S]*?}/);\n mem.members.start = nonDefaultMatch.index;\n mem.members.end = mem.members.start + nonDefaultMatch.at(0).length; \n }\n\n if (mem.defaultMembers.count > 0) {\n mem.defaultMembers.start = mem.defaultMembers.entities.at(0).start;\n mem.defaultMembers.end = (mem.members.count > 0)\n ? mem.members.start\n : mem.defaultMembers.entities.at(-1).absEnd; \n }\n\n // store the first separator of the non default\n // and default members for a consistent style\n // if one wants to add members\n mem.defaultMembers.separator = (mem.defaultMembers.count > 1) ? code.slice(mem.defaultMembers.entities[0].absEnd, mem.defaultMembers.entities[0].next) : \", \";\n mem.members.separator = (mem.members.count > 1) ? code.slice(mem.members.entities[0].absEnd, mem.members.entities[0].next) : \", \";\n\n\n const module = {\n name: node.source.value.split(\"/\").at(-1),\n start: node.source.start - node.start,\n end: node.source.end - node.start,\n type: \"string\",\n quotes: node.source.raw.at(0)\n };\n\n \n const unit = {\n code: new MagicString(code),\n defaultMembers: mem.defaultMembers,\n members: mem.members,\n module,\n start: oStart || node.start,\n end: oEnd || node.end,\n type: \"es6\"\n };\n\n return unit;\n }\n\n\n /**\n * Method to generate a unit object from an acorn\n * node, originated from a Dynamic Import Statement.\n * @param {object} node - Complete acorn node.\n * @param {object} importObject - Actual import part.\n * @returns {object} - Import Manager Unit Object.\n */\n #dynamicNodeToUnit(node, importObject) {\n\n const code = this.code.slice(node.start, node.end);\n\n const module = {\n name: importObject.source.value.split(\"/\").at(-1) || \"N/A\",\n start: importObject.source.start - node.start,\n end: importObject.source.end - node.start\n };\n\n if (importObject.source.type === \"Literal\") {\n module.type = \"string\";\n module.quotes = importObject.source.raw.at(0);\n } else {\n module.type = \"raw\";\n }\n\n const unit = {\n code: new MagicString(code),\n module,\n start: node.start,\n end: node.end,\n type: \"dynamic\",\n };\n\n return unit;\n }\n\n\n /**\n * Method to generate a unit object from an acorn\n * node, originated from a Common JS Import Statement.\n * @param {object} node - Complete acorn node.\n * @returns {object} - Import Manager Unit Object.\n */\n #cjsNodeToUnit(node) {\n\n const code = this.code.slice(node.start, node.end);\n\n const modulePart = node.declarations.at(0).init.arguments.at(0); // TODO: test if this is robust\n const module = {\n name: modulePart.value.split(\"/\").at(-1) || \"N/A\",\n start: modulePart.start - node.start,\n end: modulePart.end - node.start\n };\n\n if (modulePart.type === \"Literal\") {\n module.type = \"string\";\n module.quotes = modulePart.raw.at(0);\n } else {\n module.type = \"raw\";\n }\n\n const unit = {\n code: new MagicString(code),\n module,\n start: node.start,\n end: node.end,\n type: \"cjs\",\n };\n\n return unit;\n }\n\n // ___________________ //\n // select unit methods //\n\n /**\n * Helper method to list available units\n * in case of a MatchError.\n * @param {Object[]} units - Array of unit objects to list.\n * @returns {string} - Message for logging.\n */\n #listUnits(units) {\n const msgArray = [\"\"];\n \n units.forEach(unit => {\n msgArray.push(\n \"___\",\n `ID: ${unit.id}`,\n `HASH: ${unit.hash}`, \n `NAME: ${unit.module.name}`,\n `STATEMENT:${EOL}${unit.code.toString()}${EOL}`\n );\n });\n return msgArray.join(EOL) + EOL;\n }\n\n\n /**\n * Helper method to list all available units.\n * @returns {string} - Message string.\n */\n #listAllUnits() {\n let msg = \"\";\n for (const type in this.imports) {\n msg += this.#listUnits(this.imports[type].units);\n }\n return msg;\n }\n\n \n /**\n * Selects a unit by its module name.\n * @param {string} name - Module Name. \n * @param {string|string[]} [type] - \"cjs\", \"dynamic\", \"es6\" one as a string or multiple as array of strings\n * @param {boolean} allowNull - If false the module must be found or a MatchError is thrown.\n * @returns {Object} - An explicit unit.\n */\n selectModByName(name, type, allowNull) {\n if (!name) {\n throw new TypeError(\"The name must be provided\");\n }\n\n let unitList = [];\n\n // if the type is not specified use all types (cjs|dynamic|es6)\n if (!type) {\n type = Object.keys(this.imports);\n } else if (!Array.isArray(type)) {\n type = [type];\n }\n\n // if an empty array was passed, also use all types\n if (!type.length) {\n type = Object.keys(this.imports);\n }\n\n // test types for validity\n for (const t of type) {\n if (!(t in this.imports)) {\n throw new TypeError(`Invalid type: '${t}' - Should be one or more of: 'cjs', 'dynamic', 'es6'.`);\n }\n\n // push all available imports in one list\n if (this.imports[t].count > 0) {\n unitList.push(...this.imports[t].units);\n }\n }\n\n // filter for unit name\n const units = unitList.filter(unit => {\n const match = unit.module.name.indexOf(name) > -1;\n\n // ignore deleted units\n if (match && unit.module.name.match(/^\\(deleted\\)/)) {\n return false;\n }\n\n return match;\n });\n\n // throw errors if the match is not one\n // (if no filename was set a null match\n // is also valid)\n if (units.length === 0) {\n if (allowNull) {\n return null;\n }\n let msg = this.#listUnits(unitList);\n let typeStr;\n\n if (type.length === 1) {\n typeStr = type + \"-imports\";\n } else if (type.length < Object.keys(this.imports).length) { \n typeStr = type.join(\"-imports or \") + \"-imports\";\n } else {\n typeStr = \"any group\";\n }\n\n msg += `___${EOL}Unable to locate import statement with name: '${name}' in ${typeStr}`;\n throw new MatchError(msg);\n }\n \n else if (units.length > 1) {\n let msg = this.#listUnits(units);\n msg += `___${EOL}Found multiple matches for '${name}'. If no other solution is available you may select via hash.`;\n throw new MatchError(msg);\n }\n\n // finally add methods for manipulation to the unit\n const unit = units[0];\n unit.methods = new ImportManagerUnitMethods(unit, this.#es6NodeToUnit);\n\n return unit;\n }\n\n\n /**\n * Selects a unit by its id. Should only be used\n * for testing purposes.\n * @param {number} id - Unit id. \n * @param {boolean} allowNull - If false the module must be found or a MatchError is thrown.\n * @returns {Object} - An explicit unit.\n */\n selectModById(id, allowNull) {\n if (!id) {\n throw new TypeError(\"The id must be provided\");\n }\n \n // get the type by the id scope\n const type = this.idTypes[ Math.floor(id / this.scopeMulti) * this.scopeMulti ];\n\n // if it is not possible to extract a type by the scope,\n // the id is invalid \n if (!type) {\n // generate an ascending list of valid ids\n const ascIds = Object.keys(this.idTypes).sort();\n throw new TypeError(`Id '${id}' is invalid. Ids range from ${ascIds.at(0)} to ${ascIds.at(-1)}+`);\n }\n\n // filter the units of the given type for the id\n const units = this.imports[type].units.filter(n => n.id == id);\n\n // if null matches are allowed return null \n // if no match was found, otherwise raise\n // a match error\n if (units.length === 0) {\n if (allowNull) {\n return null;\n }\n let msg = this.#listUnits(this.imports[type].units);\n msg += `___${EOL}Unable to locate import statement with id: '${id}'`;\n throw new MatchError(msg);\n }\n\n // add unit methods\n const unit = units[0];\n unit.methods = new ImportManagerUnitMethods(unit, this.#es6NodeToUnit);\n\n return unit;\n }\n\n /**\n * Selects a unit by its hash. The hash will change\n * if the unit changes its properties in the source\n * code (like members, alias, etc.)\n * All hashes for one file are stored in a list, with\n * the corresponding id. The id-match method can there-\n * fore be used, to find the unit.\n * @param {string} hash - The hash string of the unit.\n * @param {boolean} allowNull - If false the module must be found or a MatchError is thrown.\n * @returns {object} - An explicit unit.\n */\n selectModByHash(hash, allowNull) {\n if (!(hash in this.hashList)) {\n if (allowNull) {\n return null;\n }\n let msg = this.#listAllUnits(); \n msg += `___${EOL}Unable to locate import statement with hash '${hash}'`;\n throw new MatchError(msg);\n }\n\n return this.selectModById(this.hashList[hash]);\n }\n\n // ___________________________________________ //\n // methods for unit creation, replacement, etc. //\n\n /**\n * All manipulation via unit method is made on the\n * code slice of the unit. This methods writes it\n * to the code instance. \n * @param {Object} unit - Unit Object. \n */\n commitChanges(unit) {\n this.code.overwrite(unit.start, unit.end, unit.code.toString());\n }\n\n\n /**\n * Removes a unit from the code instance.\n * The action must not be committed. \n * @param {Object} unit - Unit Object.\n * @returns {string} - Unit code, for further processing.\n */\n remove(unit) {\n let charAfter = this.code.slice(unit.end, unit.end+1);\n let end = unit.end;\n \n if (charAfter === \"\\r\") {\n end++;\n charAfter = this.code.slice(end, end+1);\n }\n if (charAfter === \"\\n\") {\n end++;\n }\n \n const code = this.code.slice(unit.start, end);\n\n this.code.remove(unit.start, end);\n unit.methods.makeUntraceable();\n this.imports[unit.type].count --;\n \n return code;\n }\n\n /**\n * Helper method to declare a variable.\n * @param {string} declarator - const|let|var|global \n * @param {string} varname - Variable Name. \n * @returns {string} - Declarator + Varname + Equal Sign.\n */\n #genDeclaration(declarator, varname) {\n let declaration;\n if (declarator === \"global\") {\n declaration = varname;\n } else {\n declaration = `${declarator} ${varname}`;\n }\n return declaration;\n }\n\n /**\n * Generates a CJS Import Statement.\n * @param {string} module - Module (path).\n * @returns {string} - CJS Import Statement.\n */\n makeCJSStatement(module, declarator, varname) {\n const declaration = this.#genDeclaration(declarator, varname);\n return `${declaration} = require(\"${module}\");${EOL}`;\n }\n\n /**\n * Generates a Dynamic Import Statement.\n * @param {string} module - Module (path).\n * @returns {string} - CJS Import Statement.\n */\n makeDynamicStatement(module, declarator, varname) {\n const declaration = this.#genDeclaration(declarator, varname);\n return `${declaration} = await import(\"${module}\");${EOL}`;\n }\n \n\n /**\n * Generates an ES6 Import Statement.\n * @param {string} module - Module (path).\n * @param {string[]} defaultMembers - Default Member Part.\n * @param {string[]} members - Member Part.\n * @returns {string} - ES6 Import Statement.\n */\n makeES6Statement(module, defaultMembers, members) {\n const memberStrArray = [];\n \n if (defaultMembers.length) {\n memberStrArray.push(\n defaultMembers.join(\", \")\n );\n }\n\n if (members.length) {\n memberStrArray.push(\n \"{ \" + members.join(\", \") + \" }\"\n );\n }\n\n let memberPart = memberStrArray.join(\", \");\n if (memberPart) {\n memberPart += \" from \";\n }\n\n return `import ${memberPart}'${module}';${EOL}`;\n }\n\n\n /**\n * Inserts an Import Statement to the top\n * of the file or after the last found import\n * statement.\n * @param {string} statement - Import Statement.\n * @param {number} pos - 'top' or 'bottom'\n */\n insertStatement(statement, pos, type) {\n\n let index = 0;\n\n if (pos !== \"top\" && this.imports[type].count > 0) {\n index = this.imports[type].units.at(-1).end;\n\n // move the index if the following char is a newline\n // (if the line was removed in an earlier operation\n // this will throw an error, don't do any change in\n // this case\n\n let nextChar;\n try {\n nextChar = this.code.slice(index, index+1);\n } catch {\n nextChar = null;\n }\n\n if (nextChar === \"\\r\") {\n index ++;\n }\n if (nextChar === \"\\n\") {\n index ++;\n }\n }\n \n else {\n // find the first meaningful (not a comment)\n // code and use the start as insertion point\n \n index = this.parsedCode.body.at(0).start;\n }\n \n this.code.appendRight(index, statement);\n }\n\n\n /**\n * Inserts an Import Statement before or after\n * a given unit. Also an existing statement can be\n * replaced.\n * @param {Object} unit - Unit Object \n * @param {string} mode - 'append'|'prepend'|'replace' \n * @param {string} statement - Import Statement. \n */\n insertAtUnit(unit, mode, statement) {\n\n let index;\n if (mode === \"append\") {\n index = unit.end;\n if (this.code.slice(index, index+1) === \"\\r\") {\n index ++;\n }\n if (this.code.slice(index, index+1) === \"\\n\") {\n index ++;\n }\n this.code.appendRight(index, statement);\n }\n \n else if (mode === \"prepend\") {\n index = unit.start;\n this.code.prependLeft(index, statement);\n }\n\n else if (mode === \"replace\") {\n // remove new line from statement\n statement = statement.slice(0, -1);\n \n this.code.overwrite(unit.start, unit.end, statement);\n unit.methods.makeUntraceable();\n this.imports[unit.type].count --;\n }\n }\n\n\n // ________________________ //\n // global debugging methods //\n\n \n /**\n * Debug statements created by IM.\n * @param {string} code - Code Snippet String.\n * @param {Object} [target] - Target Unit Object.\n * @param {string} [type] - Target type.\n * @param {string} [mode] - Insert position or attach mode.\n */\n logCreations(code, target, type, mode) {\n let msg = {\n addCode: code\n };\n if (target) {\n msg.mode = mode;\n msg.targetType = target.type;\n msg.targetUnit = target.methods.log(false);\n } else if (type) {\n msg.insert = mode;\n msg.targetType = type;\n }\n throw new DebuggingError(msg);\n }\n\n\n /**\n * Debugging method to stop the building process\n * and list all import units with its id, hash and\n * import statement.\n */\n logUnits() {\n throw new DebuggingError(this.#listAllUnits());\n }\n\n\n /**\n * Debugging method to stop the building process\n * and list the complete import object.\n */\n logUnitObjects() {\n const imports = {...this.imports};\n for (const key in imports) {\n imports[key].units.forEach(unit => {\n unit.code = [ unit.code.toString() ];\n });\n }\n throw new DebuggingError(imports);\n }\n\n\n /**\n * Warnings with spam protection. Can use internal\n * and native rollup method.\n * @param {string} msg - Warning Message. \n */\n warning(msg) {\n const hash = simpleHash(msg);\n\n if (this.warnSpamProtection.has(hash)) {\n return;\n }\n\n this.warnSpamProtection.add(hash);\n this.warn(msg);\n }\n}\n\n\n/**\n * A (simple as it gets) hash from string function.\n * @see https://gist.github.com/iperelivskiy/4110988?permalink_comment_id=2697447#gistcomment-2697447\n * @see https://gist.github.com/badboy/6267743#knuths-multiplicative-method\n * @param {string} input \n * @returns {number} - Hash number.\n */\nconst simpleHash = (input) => {\n let h = 0xdeadbeef;\n for (let i=0; i>> 16) >>> 0;\n};\n\nexport { ImportManager, DebuggingError, MatchError, simpleHash };\n"],"names":["parse","bold","yellow","fullWalk","EOL"],"mappings":"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"} +\ No newline at end of file ++{"version":3,"file":"import-manager.cjs","sources":["../src/errors.js","../src/unit-methods.js","../src/core.js"],"sourcesContent":["/**\n * Custom error to tell the user, that it is\n * not possible to select a specific unit.\n */\nclass MatchError extends Error {\n constructor(message) {\n super(message);\n this.name = \"MatchError\";\n }\n}\n\n/**\n * Custom error to abort the building process\n * for retrieving information.\n */\nclass DebuggingError extends Error {\n constructor(message) {\n if (typeof message !== \"string\") {\n message = JSON.stringify(message, null, 4);\n }\n super(message);\n this.name = \"DebuggingError\";\n }\n}\n\nexport { DebuggingError, MatchError };\n","import { DebuggingError, MatchError } from \"./errors.js\";\n\n/**\n * Creates methods for unit manipulation to\n * be attached to a requested unit.\n */\nexport default class ImportManagerUnitMethods {\n\n /**\n * Stores the handed over unit and creates\n * an update method.\n * @param {Object} unit - The unit a user requests \n * @param {*} es6NodeToUnit - Method to analyze a \n */\n constructor(unit, es6NodeToUnit) {\n this.unit = unit;\n\n // After a change in the code of a es6 unit is made\n // it gets analyzed again, which is very verbose,\n // but prevents errors. The \"MagicString\" does not\n // contain multiple changes at a time. The analysis\n // function is the same as for the initial file\n // analyses and gets handed over by the main class.\n\n this.updateUnit = () => {\n\n const unit = es6NodeToUnit(\n this.unit.code.toString(),\n this.unit.start,\n this.unit.end\n );\n\n Object.assign(this.unit, unit);\n\n };\n }\n\n\n /**\n * Makes sure, that the processed unit is of type 'es6'. \n */\n #ES6only() {\n if (this.unit.type !== \"es6\") {\n throw new Error(\"This method is only available for ES6 imports.\");\n }\n }\n\n\n /**\n * Changes the module part of a import statement.\n * @param {string | (moduleSourceRaw: string) => string} name - The new module part/path or a function\n * that receives the module's raw source code (including quotes if present) and returns the new module part/path.\n * @param {*} modType - Module type (literal|raw).\n * EDIT: Added support for name (aka rename in rollup plugin action) to be a function\n */\n renameModule(name, modType) {\n const isNameAFn = typeof name === 'function';\n\n if (!isNameAFn) {\n if (modType === \"string\") {\n if (!this.unit.module.quotes) {\n this.unit.module.quotes = \"\\\"\";\n }\n const q = this.unit.module.quotes;\n name = q + name + q;\n } else if (modType !== \"raw\") {\n throw new TypeError(`Unknown modType '${modType}'. Valid types are 'string' and 'raw'.`);\n }\n }\n \n this.unit.code.overwrite(this.unit.module.start, this.unit.module.end, isNameAFn ? name(this.unit.module.sourceRaw) : name);\n\n if (this.unit.type === \"es6\") {\n this.updateUnit();\n }\n }\n\n\n /**\n * Adds default members to the import statement.\n * @param {string[]} names - A list of default members to add.\n */\n addDefaultMembers(names) {\n this.#ES6only();\n\n let start; \n let defStr;\n let memberPart = null;\n\n // handle the case if default members already exist\n if (this.unit.defaultMembers.count > 0) {\n start = this.unit.defaultMembers.entities.at(-1).absEnd;\n defStr = this.unit.defaultMembers.separator \n + names.join(this.unit.defaultMembers.separator);\n this.unit.code.appendRight(start, defStr);\n }\n\n // handle the case if default members do not exist, \n // and also no non default members (the addition\n // needs to be appended left, otherwise is\n // interferes with the module part)\n else if (this.unit.members.count === 0) {\n start = this.unit.module.start;\n defStr = names.join(this.unit.members.separator);\n memberPart = defStr;\n defStr += \" from \";\n this.unit.code.appendLeft(start, defStr);\n }\n\n // handle the case if default members do not exist, \n // but non default members\n else {\n start = this.unit.members.start;\n defStr = names.join(this.unit.defaultMembers.separator)\n + this.unit.members.separator;\n this.unit.code.appendRight(start, defStr);\n }\n \n this.updateUnit(memberPart);\n }\n\n\n /**\n * Adds non default members to the import statement.\n * @param {string[]} names - A list of members to add. \n */\n addMembers(names) {\n this.#ES6only();\n\n let start; \n let memStr;\n let memberPart = null;\n \n // handle the case if members already exist\n if (this.unit.members.count > 0) {\n start = this.unit.members.entities.at(-1).absEnd;\n memStr = this.unit.members.separator \n + names.join(this.unit.members.separator);\n this.unit.code.appendRight(start, memStr);\n }\n\n // handle the case if members do not exist, \n // and also no default members (the addition\n // needs to be appended left, otherwise is\n // interferes with the module part)\n else if (this.unit.defaultMembers.count === 0) {\n start = this.unit.module.start;\n memStr = \"{ \"\n + names.join(this.unit.members.separator)\n + \" }\";\n memberPart = memStr;\n memStr += \" from \";\n this.unit.code.appendLeft(start, memStr);\n }\n\n // handle the case if members do not exist, \n // but default members\n else {\n start = this.unit.defaultMembers.end;\n memStr = this.unit.defaultMembers.separator\n + \"{ \"\n + names.join(this.unit.members.separator)\n + \" }\";\n this.unit.code.appendRight(start, memStr);\n }\n\n this.updateUnit(memberPart);\n }\n\n\n /**\n * Internal helper method to get the member type.\n * The user input distinguishes between member/defaultMember\n * and the plural versions of them. To prevent confusion in the\n * process of selecting the different styles in the unit, this\n * methods adds an \"s\" to the given string if missing and selects\n * the requested type.\n * @param {*} memberType \n * @returns \n */\n #getType(memberType) {\n if (memberType.at(-1) !== \"s\") {\n memberType += \"s\";\n }\n return this.unit[memberType];\n }\n\n\n /**\n * Internal helper method to find a specific member\n * or default member.\n * @param {string} memberType - member/defaultMember. \n * @param {string} name - (default) member name. \n * @returns {Object} - (default) member object.\n */\n #findMember(memberType, name) {\n if (!name) {\n throw new Error(`${memberType} name must be set.`);\n }\n const filtered = this.#getType(memberType).entities.filter(m => m.name === name);\n if (filtered.length !== 1) {\n throw new MatchError(`Unable to locate ${memberType} with name '${name}'`);\n }\n return filtered[0];\n }\n\n\n /**\n * Removes a (default) member.\n * @param {string} memberType - member|defaultMember\n * @param {string} name - Name of the (default) member \n */\n removeMember(memberType, name) {\n this.#ES6only();\n\n const member = this.#findMember(memberType, name);\n\n if (this.#getType(memberType).count === 1) {\n this.removeMembers(memberType);\n } \n\n else {\n let start;\n let end;\n \n if (member.next) {\n start = member.start;\n end = member.next;\n } else if (member.last) {\n start = member.last;\n end = member.absEnd;\n } else {\n start = member.start;\n end = member.absEnd;\n }\n\n this.unit.code.remove(start, end); \n this.updateUnit();\n\n }\n }\n\n\n /**\n * Removes an entire group of members or default members.\n * @param {string} membersType - member(s)|defaultMember(s) \n */\n removeMembers(membersType) {\n this.#ES6only();\n\n const isDefault = membersType.indexOf(\"default\") > -1;\n\n const members = this.#getType(membersType);\n const others = this.#getType(isDefault ? \"members\" : \"defaultMembers\");\n\n let memberPart = null;\n if (others.count > 0) {\n \n const start = !isDefault \n ? this.unit.defaultMembers.entities.at(-1).end\n : members.start;\n\n this.unit.code.remove(start, members.end);\n }\n\n else {\n this.unit.code.remove(members.start, this.unit.module.start);\n memberPart = \"\";\n }\n\n this.updateUnit(memberPart);\n }\n\n\n /**\n * Renames a single (default) member. The alias\n * can be kept or overwritten. \n * @param {string} memberType - member|defaultMember \n * @param {string} name - The (default) member to rename.\n * @param {string} newName - The new name of the (default) member.\n * @param {boolean} keepAlias - True if the alias shall be untouched. \n */\n renameMember(memberType, name, newName, keepAlias) {\n this.#ES6only();\n\n const member = this.#findMember(memberType, name);\n let end;\n\n if (keepAlias) {\n end = member.end;\n } else {\n end = member.absEnd;\n }\n \n this.unit.code.overwrite(member.start, end, newName);\n this.updateUnit();\n }\n\n\n /**\n * Changes the alias. Changing can be renaming\n * setting it initially or removing. \n * @param {string} memberType - member|defaultMember\n * @param {string} name - (default) member name\n * @param {string} [set] - A new name or nothing for removal\n */\n setAlias(memberType, name, set) {\n this.#ES6only();\n \n if (memberType === \"defaultMember\") {\n if (name !== \"*\") {\n throw new TypeError(\"The modification of a default member alias is only possible if the module is an asterisk. For other changes use the 'rename' method.\");\n } else if (!set) {\n throw new TypeError(\"Removing the alias of an asterisk is invalid. Use the 'rename' method for other changes.\");\n }\n }\n const aliasStr = set ? `${name} as ${set}` : name;\n this.renameMember(memberType, name, aliasStr, false);\n this.updateUnit();\n }\n\n\n /**\n * Method to call after a unit was completely removed\n * or replaced, to prevent matching it again afterwards.\n */\n makeUntraceable() {\n this.unit.id = `(deleted) ${this.unit.id}`;\n this.unit.hash = `(deleted) ${this.unit.hash}`;\n this.unit.module.name = `(deleted) ${this.unit.module.name}`;\n }\n\n\n /**\n * Debugging method to stop the building process\n * and list this unit properties.\n */\n log(error=true) {\n const unit = { ...this.unit };\n delete unit.methods;\n unit.code = [ unit.code.toString() ];\n if (error) {\n throw new DebuggingError(unit);\n }\n return unit;\n }\n}\n","/**\n * [ImportManager]{@link https://github.com/UmamiAppearance/ImportManager}\n *\n * The core class for the rollup-plugin-import-manager,\n * which can never the less be used standalone. \n * It handles code analysis, creates units from import\n * statements, attaches methods to the units and more.\n * \n * @version 0.3.3\n * @author UmamiAppearance [mail@umamiappearance.eu]\n * @license MIT\n * @see https://github.com/UmamiAppearance/rollup-plugin-import-manager\n */\n\nimport ImportManagerUnitMethods from \"./unit-methods.js\";\nimport { DebuggingError, MatchError } from \"./errors.js\";\nimport { parse } from \"acorn\";\nimport { full as fullWalk } from \"acorn-walk\"; \nimport MagicString from \"magic-string\";\nimport { bold, yellow } from \"colorette\";\nimport { EOL } from \"os\";\n\n\nclass ImportManager {\n\n /**\n * The constructor creates a class import\n * object and kicks of the code analysis.\n * @param {string} source - The unmodified source code.\n * @param {string} filename - The path/name of the input file (used for hash generation). \n * @param {object} [warnSpamProtection] - A Set which contains all previously printed warning hashes.\n * @param {boolean} [warnings=true] - Pass false to suppress warning messages.\n * @param {object} [pluginInstance] - Rollup plugin instance if used as a plugin.\n */\n constructor(source, filename, warnSpamProtection=new Set(), warnings=true, pluginInstance=null) {\n\n if (!source) {\n source=\"\";\n }\n\n if (!filename) {\n filename = String(simpleHash(source));\n }\n\n this.scopeMulti = 1000;\n\n this.imports = {\n es6: {\n count: 0,\n idScope: 1 * this.scopeMulti,\n searched: false,\n units: []\n },\n dynamic: {\n count: 0,\n idScope: 2 * this.scopeMulti,\n searched: false,\n units: []\n },\n cjs: {\n count: 0,\n idScope: 3 * this.scopeMulti,\n searched: false,\n units: []\n }\n\n };\n\n // id scope lookup table with the associated type\n this.idTypes = Object.fromEntries(Object.entries(this.imports).map(([k, v]) => [v.idScope, k]));\n\n this.code = new MagicString(source);\n\n this.hashList = {};\n this.filename = filename.split(process.cwd()).at(1);\n this.warnSpamProtection = warnSpamProtection;\n \n this.parsedCode = parse(source, {\n ecmaVersion: \"latest\",\n sourceType: \"module\"\n });\n\n if (!warnings) {\n this.warning = () => {\n return;\n };\n }\n \n else {\n if (pluginInstance) {\n this.warn = pluginInstance.warn;\n } else {\n this.warn = msg => {\n console.warn(\n bold(yellow(`ImportManager: ${msg}`))\n );\n };\n }\n }\n \n this.analyze();\n }\n\n\n /**\n * Analyzes the source and stores all import\n * statements as unit objects in the object\n * \"this.imports\"\n */\n analyze() {\n \n let cjsId = this.imports.cjs.idScope;\n let cjsIndex = 0;\n\n let dynamicId = this.imports.dynamic.idScope;\n let dynamicIndex = 0;\n\n let es6Id = this.imports.es6.idScope;\n let es6Index = 0;\n\n this.parsedCode.body.forEach(node => {\n\n if (node.type === \"ImportDeclaration\") {\n const unit = this.#es6NodeToUnit(node);\n unit.id = es6Id ++;\n unit.index = es6Index ++;\n unit.hash = this.#makeHash(unit);\n this.imports.es6.units.push(unit);\n this.imports.es6.count ++;\n }\n \n else if (node.type === \"VariableDeclaration\" ||\n node.type === \"ExpressionStatement\")\n {\n fullWalk(node, part => {\n\n if (part.type === \"ImportExpression\") {\n const unit = this.#dynamicNodeToUnit(node, part);\n unit.id = dynamicId ++;\n unit.index = dynamicIndex ++;\n unit.hash = this.#makeHash(unit);\n this.imports.dynamic.units.push(unit);\n this.imports.dynamic.count ++;\n }\n \n else if (part.type === \"Identifier\" && part.name === \"require\") {\n const unit = this.#cjsNodeToUnit(node);\n unit.id = cjsId ++;\n unit.index = cjsIndex ++;\n unit.hash = this.#makeHash(unit);\n this.imports.cjs.units.push(unit);\n this.imports.cjs.count ++;\n }\n\n });\n }\n });\n }\n\n /**\n * Helper method to generate a very simple hash\n * from the unit properties.\n * @param {Object} unit - Unit to generate a hash from. \n * @returns {string} - a hash as a string \n */\n #makeHash(unit) {\n\n const makeInput = (unit) => {\n \n const joinProps = list => {\n list.forEach(member => {\n inputStr += member.name;\n if (member.alias) {\n inputStr += member.alias.name;\n }\n });\n }; \n\n let inputStr = unit.module.name\n + unit.type\n + this.filename;\n \n if (unit.members) {\n joinProps(unit.members.entities);\n }\n\n if (unit.defaultMembers) {\n joinProps(unit.defaultMembers.entities);\n }\n\n return inputStr;\n };\n\n const input = makeInput(unit);\n let hash = String(simpleHash(input));\n\n // handle duplicates\n if (hash in this.hashList) {\n \n if (unit.module.name !== \"N/A\") {\n this.warning(`It seems like there are multiple imports of module '${unit.module.name}'. You should examine that.`);\n }\n \n for (let nr=2;; nr++) {\n const nHash = `${hash}#${nr}`;\n if (!(nHash in this.hashList)) {\n hash = nHash;\n break;\n }\n }\n }\n \n this.hashList[hash] = unit.id;\n\n return hash;\n }\n\n\n /**\n * Method to generate a unit object from an acorn\n * node, originated from an ES6 Import Statement. \n * @param {Object|string} node - acorn node or es6 import statement string. \n * @param {number} [oStart] - For updating units the original start index has to be passed. \n * @param {number} [oEnd] - For updating units the original end index has to be passed.\n * @returns {object} - Import Manager Unit Object.\n */\n #es6NodeToUnit(node, oStart, oEnd) {\n\n let code;\n if (typeof node === \"string\") {\n code = node;\n try {\n node = parse(node, {\n ecmaVersion: \"latest\",\n sourceType: \"module\"\n }).body.at(0);\n } catch(e) {\n if (e instanceof SyntaxError) {\n let msg = `${EOL}${EOL}Generated Code Snippet${EOL}----------------------${EOL}`;\n let { line, column } = e.loc;\n line --;\n code.toString().split(EOL).forEach((l, i) => {\n msg += `l${EOL}`;\n if (line === i) {\n msg += bold(\" \".repeat(column) + `^${EOL}`);\n }\n });\n\n\n throw new SyntaxError(msg);\n }\n throw new Error(e);\n }\n } else {\n code = this.code.slice(node.start, node.end);\n }\n \n const mem = {\n defaultMembers: {\n count: 0,\n entities: []\n },\n members: {\n count: 0,\n entities: []\n }\n };\n\n if (node.specifiers) {\n for (const spec of node.specifiers) {\n \n const memType = spec.type === \"ImportSpecifier\" ? \"members\" : \"defaultMembers\";\n const index = mem[memType].count;\n const hasAlias = spec.local.start !== spec.start;\n\n const start = spec.start - node.start;\n let end;\n if (!hasAlias) {\n end = spec.end - node.start;\n } else {\n end = (memType === \"members\") ? spec.imported.end-node.start : start+1;\n }\n const name = code.slice(start, end);\n \n\n const member = {\n index,\n name,\n start,\n end,\n absEnd: spec.end - node.start\n };\n\n if (hasAlias) {\n member.alias = {\n name: spec.local.name,\n start: spec.local.start - node.start,\n end: spec.local.end - node.start\n };\n }\n\n if (index > 0) {\n member.last = mem[memType].entities[index-1].absEnd;\n mem[memType].entities[index-1].next = member.start;\n }\n \n mem[memType].entities.push(member);\n mem[memType].count ++;\n\n }\n }\n\n if (mem.members.count > 0) {\n const nonDefaultMatch = code.match(/{[\\s\\S]*?}/);\n mem.members.start = nonDefaultMatch.index;\n mem.members.end = mem.members.start + nonDefaultMatch.at(0).length; \n }\n\n if (mem.defaultMembers.count > 0) {\n mem.defaultMembers.start = mem.defaultMembers.entities.at(0).start;\n mem.defaultMembers.end = (mem.members.count > 0)\n ? mem.members.start\n : mem.defaultMembers.entities.at(-1).absEnd; \n }\n\n // store the first separator of the non default\n // and default members for a consistent style\n // if one wants to add members\n mem.defaultMembers.separator = (mem.defaultMembers.count > 1) ? code.slice(mem.defaultMembers.entities[0].absEnd, mem.defaultMembers.entities[0].next) : \", \";\n mem.members.separator = (mem.members.count > 1) ? code.slice(mem.members.entities[0].absEnd, mem.members.entities[0].next) : \", \";\n\n\n const module = {\n name: node.source.value.split(\"/\").at(-1),\n start: node.source.start - node.start,\n end: node.source.end - node.start,\n type: \"string\",\n quotes: node.source.raw.at(0),\n // EDIT: added module's raw source code\n sourceRaw: node.source.raw\n };\n\n \n const unit = {\n code: new MagicString(code),\n defaultMembers: mem.defaultMembers,\n members: mem.members,\n module,\n start: oStart || node.start,\n end: oEnd || node.end,\n type: \"es6\"\n };\n\n return unit;\n }\n\n\n /**\n * Method to generate a unit object from an acorn\n * node, originated from a Dynamic Import Statement.\n * @param {object} node - Complete acorn node.\n * @param {object} importObject - Actual import part.\n * @returns {object} - Import Manager Unit Object.\n */\n #dynamicNodeToUnit(node, importObject) {\n\n const code = this.code.slice(node.start, node.end);\n\n const module = {\n name: importObject.source.value.split(\"/\").at(-1) || \"N/A\",\n start: importObject.source.start - node.start,\n end: importObject.source.end - node.start,\n // EDIT: added module's raw source code\n sourceRaw: importObject.source.raw\n };\n\n if (importObject.source.type === \"Literal\") {\n module.type = \"string\";\n module.quotes = importObject.source.raw.at(0);\n } else {\n module.type = \"raw\";\n }\n\n const unit = {\n code: new MagicString(code),\n module,\n start: node.start,\n end: node.end,\n type: \"dynamic\",\n };\n\n return unit;\n }\n\n\n /**\n * Method to generate a unit object from an acorn\n * node, originated from a Common JS Import Statement.\n * @param {object} node - Complete acorn node.\n * @returns {object} - Import Manager Unit Object.\n */\n #cjsNodeToUnit(node) {\n\n const code = this.code.slice(node.start, node.end);\n\n const modulePart = node.declarations.at(0).init.arguments.at(0); // TODO: test if this is robust\n const module = {\n name: modulePart.value.split(\"/\").at(-1) || \"N/A\",\n start: modulePart.start - node.start,\n end: modulePart.end - node.start,\n // EDIT: added module's raw source code\n sourceRaw: modulePart.raw\n };\n\n if (modulePart.type === \"Literal\") {\n module.type = \"string\";\n module.quotes = modulePart.raw.at(0);\n } else {\n module.type = \"raw\";\n }\n\n const unit = {\n code: new MagicString(code),\n module,\n start: node.start,\n end: node.end,\n type: \"cjs\",\n };\n\n return unit;\n }\n\n // ___________________ //\n // select unit methods //\n\n /**\n * Helper method to list available units\n * in case of a MatchError.\n * @param {Object[]} units - Array of unit objects to list.\n * @returns {string} - Message for logging.\n */\n #listUnits(units) {\n const msgArray = [\"\"];\n \n units.forEach(unit => {\n msgArray.push(\n \"___\",\n `ID: ${unit.id}`,\n `HASH: ${unit.hash}`, \n `NAME: ${unit.module.name}`,\n `STATEMENT:${EOL}${unit.code.toString()}${EOL}`\n );\n });\n return msgArray.join(EOL) + EOL;\n }\n\n\n /**\n * Helper method to list all available units.\n * @returns {string} - Message string.\n */\n #listAllUnits() {\n let msg = \"\";\n for (const type in this.imports) {\n msg += this.#listUnits(this.imports[type].units);\n }\n return msg;\n }\n\n \n /**\n * Selects a unit by its module name.\n * @param {string|RegExp} name - Module Name. \n * @param {string|string[]} [type] - \"cjs\", \"dynamic\", \"es6\" one as a string or multiple as array of strings\n * @param {boolean} allowNull - If false the module must be found or a MatchError is thrown.\n * @returns {Object} - An explicit unit.\n */\n selectModByName(name, type, allowNull) {\n if (!name) {\n throw new TypeError(\"The name must be provided\");\n }\n\n let unitList = [];\n\n // if the type is not specified use all types (cjs|dynamic|es6)\n if (!type) {\n type = Object.keys(this.imports);\n } else if (!Array.isArray(type)) {\n type = [type];\n }\n\n // if an empty array was passed, also use all types\n if (!type.length) {\n type = Object.keys(this.imports);\n }\n\n // test types for validity\n for (const t of type) {\n if (!(t in this.imports)) {\n throw new TypeError(`Invalid type: '${t}' - Should be one or more of: 'cjs', 'dynamic', 'es6'.`);\n }\n\n // push all available imports in one list\n if (this.imports[t].count > 0) {\n unitList.push(...this.imports[t].units);\n }\n }\n\n // filter for unit name\n const units = unitList.filter(unit => {\n // EDIT: unit.module can now be a string or a regex\n const match = name instanceof RegExp ? unit.module.name !== undefined && name.test(unit.module.name) : unit.module.name.indexOf(name) > -1;\n\n // ignore deleted units\n if (match && unit.module.name.match(/^\\(deleted\\)/)) {\n return false;\n }\n\n return match;\n });\n\n // throw errors if the match is not one\n // (if no filename was set a null match\n // is also valid)\n if (units.length === 0) {\n if (allowNull) {\n return null;\n }\n let msg = this.#listUnits(unitList);\n let typeStr;\n\n if (type.length === 1) {\n typeStr = type + \"-imports\";\n } else if (type.length < Object.keys(this.imports).length) { \n typeStr = type.join(\"-imports or \") + \"-imports\";\n } else {\n typeStr = \"any group\";\n }\n\n msg += `___${EOL}Unable to locate import statement with name: '${name}' in ${typeStr}`;\n throw new MatchError(msg);\n }\n \n else if (units.length > 1) {\n let msg = this.#listUnits(units);\n msg += `___${EOL}Found multiple matches for '${name}'. If no other solution is available you may select via hash.`;\n throw new MatchError(msg);\n }\n\n // finally add methods for manipulation to the unit\n const unit = units[0];\n unit.methods = new ImportManagerUnitMethods(unit, this.#es6NodeToUnit);\n\n return unit;\n }\n\n\n /**\n * Selects a unit by its id. Should only be used\n * for testing purposes.\n * @param {number} id - Unit id. \n * @param {boolean} allowNull - If false the module must be found or a MatchError is thrown.\n * @returns {Object} - An explicit unit.\n */\n selectModById(id, allowNull) {\n if (!id) {\n throw new TypeError(\"The id must be provided\");\n }\n \n // get the type by the id scope\n const type = this.idTypes[ Math.floor(id / this.scopeMulti) * this.scopeMulti ];\n\n // if it is not possible to extract a type by the scope,\n // the id is invalid \n if (!type) {\n // generate an ascending list of valid ids\n const ascIds = Object.keys(this.idTypes).sort();\n throw new TypeError(`Id '${id}' is invalid. Ids range from ${ascIds.at(0)} to ${ascIds.at(-1)}+`);\n }\n\n // filter the units of the given type for the id\n const units = this.imports[type].units.filter(n => n.id == id);\n\n // if null matches are allowed return null \n // if no match was found, otherwise raise\n // a match error\n if (units.length === 0) {\n if (allowNull) {\n return null;\n }\n let msg = this.#listUnits(this.imports[type].units);\n msg += `___${EOL}Unable to locate import statement with id: '${id}'`;\n throw new MatchError(msg);\n }\n\n // add unit methods\n const unit = units[0];\n unit.methods = new ImportManagerUnitMethods(unit, this.#es6NodeToUnit);\n\n return unit;\n }\n\n /**\n * Selects a unit by its hash. The hash will change\n * if the unit changes its properties in the source\n * code (like members, alias, etc.)\n * All hashes for one file are stored in a list, with\n * the corresponding id. The id-match method can there-\n * fore be used, to find the unit.\n * @param {string} hash - The hash string of the unit.\n * @param {boolean} allowNull - If false the module must be found or a MatchError is thrown.\n * @returns {object} - An explicit unit.\n */\n selectModByHash(hash, allowNull) {\n if (!(hash in this.hashList)) {\n if (allowNull) {\n return null;\n }\n let msg = this.#listAllUnits(); \n msg += `___${EOL}Unable to locate import statement with hash '${hash}'`;\n throw new MatchError(msg);\n }\n\n return this.selectModById(this.hashList[hash]);\n }\n\n // ___________________________________________ //\n // methods for unit creation, replacement, etc. //\n\n /**\n * All manipulation via unit method is made on the\n * code slice of the unit. This methods writes it\n * to the code instance. \n * @param {Object} unit - Unit Object. \n */\n commitChanges(unit) {\n this.code.overwrite(unit.start, unit.end, unit.code.toString());\n }\n\n\n /**\n * Removes a unit from the code instance.\n * The action must not be committed. \n * @param {Object} unit - Unit Object.\n * @returns {string} - Unit code, for further processing.\n */\n remove(unit) {\n let charAfter = this.code.slice(unit.end, unit.end+1);\n let end = unit.end;\n \n if (charAfter === \"\\r\") {\n end++;\n charAfter = this.code.slice(end, end+1);\n }\n if (charAfter === \"\\n\") {\n end++;\n }\n \n const code = this.code.slice(unit.start, end);\n\n this.code.remove(unit.start, end);\n unit.methods.makeUntraceable();\n this.imports[unit.type].count --;\n \n return code;\n }\n\n /**\n * Helper method to declare a variable.\n * @param {string} declarator - const|let|var|global \n * @param {string} varname - Variable Name. \n * @returns {string} - Declarator + Varname + Equal Sign.\n */\n #genDeclaration(declarator, varname) {\n let declaration;\n if (declarator === \"global\") {\n declaration = varname;\n } else {\n declaration = `${declarator} ${varname}`;\n }\n return declaration;\n }\n\n /**\n * Generates a CJS Import Statement.\n * @param {string} module - Module (path).\n * @returns {string} - CJS Import Statement.\n */\n makeCJSStatement(module, declarator, varname) {\n const declaration = this.#genDeclaration(declarator, varname);\n return `${declaration} = require(\"${module}\");${EOL}`;\n }\n\n /**\n * Generates a Dynamic Import Statement.\n * @param {string} module - Module (path).\n * @returns {string} - CJS Import Statement.\n */\n makeDynamicStatement(module, declarator, varname) {\n const declaration = this.#genDeclaration(declarator, varname);\n return `${declaration} = await import(\"${module}\");${EOL}`;\n }\n \n\n /**\n * Generates an ES6 Import Statement.\n * @param {string} module - Module (path).\n * @param {string[]} defaultMembers - Default Member Part.\n * @param {string[]} members - Member Part.\n * @returns {string} - ES6 Import Statement.\n */\n makeES6Statement(module, defaultMembers, members) {\n const memberStrArray = [];\n \n if (defaultMembers.length) {\n memberStrArray.push(\n defaultMembers.join(\", \")\n );\n }\n\n if (members.length) {\n memberStrArray.push(\n \"{ \" + members.join(\", \") + \" }\"\n );\n }\n\n let memberPart = memberStrArray.join(\", \");\n if (memberPart) {\n memberPart += \" from \";\n }\n\n return `import ${memberPart}'${module}';${EOL}`;\n }\n\n\n /**\n * Inserts an Import Statement to the top\n * of the file or after the last found import\n * statement.\n * @param {string} statement - Import Statement.\n * @param {number} pos - 'top' or 'bottom'\n */\n insertStatement(statement, pos, type) {\n\n let index = 0;\n\n if (pos !== \"top\" && this.imports[type].count > 0) {\n index = this.imports[type].units.at(-1).end;\n\n // move the index if the following char is a newline\n // (if the line was removed in an earlier operation\n // this will throw an error, don't do any change in\n // this case\n\n let nextChar;\n try {\n nextChar = this.code.slice(index, index+1);\n } catch {\n nextChar = null;\n }\n\n if (nextChar === \"\\r\") {\n index ++;\n }\n if (nextChar === \"\\n\") {\n index ++;\n }\n }\n \n else {\n // find the first meaningful (not a comment)\n // code and use the start as insertion point\n \n index = this.parsedCode.body.at(0).start;\n }\n \n this.code.appendRight(index, statement);\n }\n\n\n /**\n * Inserts an Import Statement before or after\n * a given unit. Also an existing statement can be\n * replaced.\n * @param {Object} unit - Unit Object \n * @param {string} mode - 'append'|'prepend'|'replace' \n * @param {string} statement - Import Statement. \n */\n insertAtUnit(unit, mode, statement) {\n\n let index;\n if (mode === \"append\") {\n index = unit.end;\n if (this.code.slice(index, index+1) === \"\\r\") {\n index ++;\n }\n if (this.code.slice(index, index+1) === \"\\n\") {\n index ++;\n }\n this.code.appendRight(index, statement);\n }\n \n else if (mode === \"prepend\") {\n index = unit.start;\n this.code.prependLeft(index, statement);\n }\n\n else if (mode === \"replace\") {\n // remove new line from statement\n statement = statement.slice(0, -1);\n \n this.code.overwrite(unit.start, unit.end, statement);\n unit.methods.makeUntraceable();\n this.imports[unit.type].count --;\n }\n }\n\n\n // ________________________ //\n // global debugging methods //\n\n \n /**\n * Debug statements created by IM.\n * @param {string} code - Code Snippet String.\n * @param {Object} [target] - Target Unit Object.\n * @param {string} [type] - Target type.\n * @param {string} [mode] - Insert position or attach mode.\n */\n logCreations(code, target, type, mode) {\n let msg = {\n addCode: code\n };\n if (target) {\n msg.mode = mode;\n msg.targetType = target.type;\n msg.targetUnit = target.methods.log(false);\n } else if (type) {\n msg.insert = mode;\n msg.targetType = type;\n }\n throw new DebuggingError(msg);\n }\n\n\n /**\n * Debugging method to stop the building process\n * and list all import units with its id, hash and\n * import statement.\n */\n logUnits() {\n throw new DebuggingError(this.#listAllUnits());\n }\n\n\n /**\n * Debugging method to stop the building process\n * and list the complete import object.\n */\n logUnitObjects() {\n const imports = {...this.imports};\n for (const key in imports) {\n imports[key].units.forEach(unit => {\n unit.code = [ unit.code.toString() ];\n });\n }\n throw new DebuggingError(imports);\n }\n\n\n /**\n * Warnings with spam protection. Can use internal\n * and native rollup method.\n * @param {string} msg - Warning Message. \n */\n warning(msg) {\n const hash = simpleHash(msg);\n\n if (this.warnSpamProtection.has(hash)) {\n return;\n }\n\n this.warnSpamProtection.add(hash);\n this.warn(msg);\n }\n}\n\n\n/**\n * A (simple as it gets) hash from string function.\n * @see https://gist.github.com/iperelivskiy/4110988?permalink_comment_id=2697447#gistcomment-2697447\n * @see https://gist.github.com/badboy/6267743#knuths-multiplicative-method\n * @param {string} input \n * @returns {number} - Hash number.\n */\nconst simpleHash = (input) => {\n let h = 0xdeadbeef;\n for (let i=0; i>> 16) >>> 0;\n};\n\nexport { ImportManager, DebuggingError, MatchError, simpleHash };\n"],"names":["parse","bold","yellow","fullWalk","EOL"],"mappings":"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"} +\ No newline at end of file +diff --git a/node_modules/import-manager/src/core.js b/node_modules/import-manager/src/core.js +index 28e1703..c806ecd 100644 +--- a/node_modules/import-manager/src/core.js ++++ b/node_modules/import-manager/src/core.js +@@ -335,7 +335,9 @@ class ImportManager { + start: node.source.start - node.start, + end: node.source.end - node.start, + type: "string", +- quotes: node.source.raw.at(0) ++ quotes: node.source.raw.at(0), ++ // EDIT: added module's raw source code ++ sourceRaw: node.source.raw + }; + + +@@ -367,7 +369,9 @@ class ImportManager { + const module = { + name: importObject.source.value.split("/").at(-1) || "N/A", + start: importObject.source.start - node.start, +- end: importObject.source.end - node.start ++ end: importObject.source.end - node.start, ++ // EDIT: added module's raw source code ++ sourceRaw: importObject.source.raw + }; + + if (importObject.source.type === "Literal") { +@@ -403,7 +407,9 @@ class ImportManager { + const module = { + name: modulePart.value.split("/").at(-1) || "N/A", + start: modulePart.start - node.start, +- end: modulePart.end - node.start ++ end: modulePart.end - node.start, ++ // EDIT: added module's raw source code ++ sourceRaw: modulePart.raw + }; + + if (modulePart.type === "Literal") { +@@ -464,7 +470,7 @@ class ImportManager { + + /** + * Selects a unit by its module name. +- * @param {string} name - Module Name. ++ * @param {string|RegExp} name - Module Name. + * @param {string|string[]} [type] - "cjs", "dynamic", "es6" one as a string or multiple as array of strings + * @param {boolean} allowNull - If false the module must be found or a MatchError is thrown. + * @returns {Object} - An explicit unit. +@@ -502,7 +508,8 @@ class ImportManager { + + // filter for unit name + const units = unitList.filter(unit => { +- const match = unit.module.name.indexOf(name) > -1; ++ // EDIT: unit.module can now be a string or a regex ++ const match = name instanceof RegExp ? unit.module.name !== undefined && name.test(unit.module.name) : unit.module.name.indexOf(name) > -1; + + // ignore deleted units + if (match && unit.module.name.match(/^\(deleted\)/)) { +diff --git a/node_modules/import-manager/src/unit-methods.js b/node_modules/import-manager/src/unit-methods.js +index 26534df..1a50d0d 100644 +--- a/node_modules/import-manager/src/unit-methods.js ++++ b/node_modules/import-manager/src/unit-methods.js +@@ -48,21 +48,27 @@ export default class ImportManagerUnitMethods { + + /** + * Changes the module part of a import statement. +- * @param {string} name - The new module part/path. ++ * @param {string | (moduleSourceRaw: string) => string} name - The new module part/path or a function ++ * that receives the module's raw source code (including quotes if present) and returns the new module part/path. + * @param {*} modType - Module type (literal|raw). ++ * EDIT: Added support for name (aka rename in rollup plugin action) to be a function + */ + renameModule(name, modType) { +- if (modType === "string") { +- if (!this.unit.module.quotes) { +- this.unit.module.quotes = "\""; ++ const isNameAFn = typeof name === 'function'; ++ ++ if (!isNameAFn) { ++ if (modType === "string") { ++ if (!this.unit.module.quotes) { ++ this.unit.module.quotes = "\""; ++ } ++ const q = this.unit.module.quotes; ++ name = q + name + q; ++ } else if (modType !== "raw") { ++ throw new TypeError(`Unknown modType '${modType}'. Valid types are 'string' and 'raw'.`); + } +- const q = this.unit.module.quotes; +- name = q + name + q; +- } else if (modType !== "raw") { +- throw new TypeError(`Unknown modType '${modType}'. Valid types are 'string' and 'raw'.`); + } + +- this.unit.code.overwrite(this.unit.module.start, this.unit.module.end, name); ++ this.unit.code.overwrite(this.unit.module.start, this.unit.module.end, isNameAFn ? name(this.unit.module.sourceRaw) : name); + + if (this.unit.type === "es6") { + this.updateUnit(); diff --git a/patches/rollup-plugin-import-manager+0.5.3.patch b/patches/rollup-plugin-import-manager+0.5.3.patch new file mode 100644 index 0000000..8e952f6 --- /dev/null +++ b/patches/rollup-plugin-import-manager+0.5.3.patch @@ -0,0 +1,26 @@ +diff --git a/node_modules/rollup-plugin-import-manager/README.md b/node_modules/rollup-plugin-import-manager/README.md +index f1bbebd..b13192a 100644 +--- a/node_modules/rollup-plugin-import-manager/README.md ++++ b/node_modules/rollup-plugin-import-manager/README.md +@@ -162,7 +162,7 @@ This is where the plugin comes to life. Here is the place where units are gettin + --- + + #### `module` [option for units] +-Type: `String` ++Type: `String` | `RexExp` + Default: `null` + + Selects a unit by its module name. Each import has a name object. This is constructed from the module. +@@ -353,10 +353,10 @@ An option to target an alias of a [selected](#select-option-for-actions) `defaul + + + ##### `rename` [option for actions] +-Type: `String` ++Type: `String` | `(moduleSourceRaw: string) => string` + Default: `null` + +-This option is used to rename a [selected](#select-option-for-actions) specific part (`defaultMember`, `member`, `module`). The value is the new name of the selected part. See this [example](#changing-the-module). ++This option is used to rename a [selected](#select-option-for-actions) specific part (`defaultMember`, `member`, `module`). The value is a string of the new name of the selected part. See this [example](#changing-the-module). If the selected part is `module`, the value could alternatively be a function accepting the whole raw module source (ex: `"./module-name"` including quotes) and returning the whole new name (ex: `"./newmodule-name"` including quotes). + + + ##### `modType` [option for actions] diff --git a/vite/vite-web-view.config.ts b/vite/vite-web-view.config.ts index 51c61b1..7a2cf74 100644 --- a/vite/vite-web-view.config.ts +++ b/vite/vite-web-view.config.ts @@ -6,17 +6,17 @@ import { defineConfig } from "vite"; import path from "path"; import react from "@vitejs/plugin-react"; import { importManager } from "rollup-plugin-import-manager"; +import escapeStringRegexp from "escape-string-regexp"; import { getFileExtensionByModuleFormat, + getWebViewTsxPaths, paranextProvidedModules, webViewTempDir, webViewTsxGlob, } from "./vite.util"; -import { globSync } from "glob"; /** List of TypeScript WebView files to transpile */ -const webViews = globSync(webViewTsxGlob, { ignore: "node_modules/**" }); -console.log(JSON.stringify(webViews)); +const tsxWebViews = getWebViewTsxPaths(); /** Tracks which entry file we're working with in determining the file name. */ let entryFileIndex = 0; @@ -30,7 +30,9 @@ export default defineConfig({ importManager({ include: webViewTsxGlob, units: paranextProvidedModules.map((module) => ({ - module, + // Match the whole module name, nothing more, nothing less + module: + new RegExp(`^${escapeStringRegexp(module)}$`), actions: "remove", })), }), @@ -39,7 +41,7 @@ export default defineConfig({ // This project is a library as it is being used in Paranext lib: { // List each WebView file as an entry file because each needs to be transpiled - entry: webViews.map((webView) => path.resolve(__dirname, "../", webView)), + entry: tsxWebViews.map((webView) => path.resolve(__dirname, "../", webView)), /** * Get the output file name for each WebView. * @@ -50,7 +52,7 @@ export default defineConfig({ */ fileName: (moduleFormat, entryName) => { // Get the corresponding webView file for this entry - const webViewFilePath = webViews[entryFileIndex]; + const webViewFilePath = tsxWebViews[entryFileIndex]; const webViewFileInfo = path.parse(webViewFilePath); if (entryName !== webViewFileInfo.name) throw new Error( diff --git a/vite/vite.config.ts b/vite/vite.config.ts index c5f2be1..31df1a4 100644 --- a/vite/vite.config.ts +++ b/vite/vite.config.ts @@ -4,17 +4,51 @@ import { defineConfig } from "vite"; import path from "path"; +import { importManager } from "rollup-plugin-import-manager"; +import escapeStringRegexp from "escape-string-regexp"; import { string as importString } from "rollup-plugin-string"; -import { paranextProvidedModules, webViewGlob, webViewTsxGlob } from "./vite.util"; +import { + paranextProvidedModules, + webViewGlob, + webViewTsxImportRegex, + webViewTempDir, + getWebViewTsxPaths, + insertWebViewTempDir, + webViewTempGlob, + getFileExtensionByModuleFormat, +} from "./vite.util"; + +/** List of TypeScript WebView files transpiled in the first build step */ +const tsxWebViews = getWebViewTsxPaths(); // https://vitejs.dev/config/ export default defineConfig({ plugins: [ + // Redirect WebView imports to their version built in the first build step + importManager({ + // Need to include all files that could import WebViews + include: "**/*.{ts,tsx,js,jsx}", + units: tsxWebViews.map((webView) => { + const webViewInfo = path.parse(webView); + // Get the file name without the extension if it is tsx as tsx is inferred when importing + const webViewModuleName = + webViewInfo.ext === ".tsx" ? webViewInfo.name : webViewInfo.base; + return { + module: + // Match the whole module name, nothing more, nothing less + new RegExp(`^${escapeStringRegexp(webViewModuleName)}$`), + actions: { + select: "module", + rename: insertWebViewTempDir, + }, + }; + }), + }), // Import web view files as strings to pass on the papi // importString plugin must be after any other plugins that need to transpile these files { ...importString({ - include: webViewGlob, + include: [webViewGlob, webViewTempGlob], }), enforce: "post", }, @@ -25,7 +59,10 @@ export default defineConfig({ // The main entry file of the extension entry: path.resolve(__dirname, "../lib/main.ts"), // The output file name for the extension (file extension is appended) - fileName: "paranext-extension-template", + fileName: (moduleFormat, entryName) => + `paranext-extension-template.${getFileExtensionByModuleFormat( + moduleFormat + )}`, // Output to cjs format as that's what Paranext supports formats: ["cjs"], }, @@ -36,4 +73,26 @@ export default defineConfig({ // Generate sourcemaps as separate files since VSCode can load them directly sourcemap: true, }, + /* resolve: { + alias: [ + { + find: webViewTsxImportRegex, + // Pass the whole import string into the resolver + replacement: '$&', + customResolver(source, importer) { + const webViewFileInfo = path.parse(source); + const importerInfo = path.parse(importer); + const finalPath = path.resolve( + importerInfo.dir, + webViewFileInfo.dir, + webViewTempDir, + // If there is no file extension (parsed as the extension being .web-view), put js on it + webViewFileInfo.ext === '.web-view' ? `${webViewFileInfo.base}.js` : webViewFileInfo.base + ); + console.log(`${source} -> ${finalPath}`); + return finalPath; + }, + }, + ], + }, */ }); diff --git a/vite/vite.util.ts b/vite/vite.util.ts index d8e69bf..0707dea 100644 --- a/vite/vite.util.ts +++ b/vite/vite.util.ts @@ -1,6 +1,8 @@ +import path from "path"; import { ModuleFormat } from "rollup"; +import { globSync } from "glob"; -/* +/** * Glob filename matcher for web views. * React Web Views should be named .web-view.tsx * HTML Web Views should be named .web-view.ejs @@ -9,16 +11,23 @@ import { ModuleFormat } from "rollup"; export const webViewGlob = "**/*.web-view.{tsx,ejs}"; export const webViewTsxGlob = "**/*.web-view.tsx"; +/** + * Regex matcher for TypeScript WebView imports + */ +export const webViewTsxImportRegex = /^.+\.web-view(\.tsx)?$/; + /** Name of adjacent folder used to store WebView files transpiled in the first build step */ export const webViewTempDir = "temp-vite"; +export const webViewTempGlob = `**/${webViewTempDir}/*.web-view.js`; /** Modules that Paranext supplies so extensions can use them easily */ export const paranextProvidedModules = ["react", "react-dom/client", "papi"]; /** * Gets a file extension based on the moduleFormat input. - * Vite does this better automatically for us if `fileName` is a string, - * but we need to do this since fileName is a function. :( + * Vite does this automatically for us if `fileName` is a string, + * but we want our cjs module to be '.js' while still using ES Module + * imports in our vite config. * * If package.json does not contain 'type': 'module', Vite swaps some file extensions out. * Short explanation in a note at https://vitejs.dev/guide/build.html#library-mode @@ -30,10 +39,37 @@ export function getFileExtensionByModuleFormat(moduleFormat: ModuleFormat) { case "es": return "js"; case "cjs": - return "js"; // 'cjs' if package.json has "type": "module", but Paranext uses commonjs modules + return "js"; // Vite uses '.cjs' if package.json has "type": "module", but Paranext uses commonjs modules, so let's just use 'js' case "umd": return "umd.cjs"; default: return `${moduleFormat}.js`; } } + +/** + * Get a list of TypeScript WebView files to transpile. + * Path relative to project root + */ +export function getWebViewTsxPaths() { + return globSync(webViewTsxGlob, { ignore: "node_modules/**" }); +} + +/** + * Formats a WebView import module path to read its built version + * @param moduleSourceRaw whole module import string including quotes e.g. `"./my.web-view"` + * @returns WebView import module path with temporary WebView directory inserted into the module path + */ +export function insertWebViewTempDir(moduleSourceRaw: string) { + // Note the style of quotes used + const quote = moduleSourceRaw.at(0); + // Get rid of the quotes + const importPath = moduleSourceRaw.slice(1, -1); + const importInfo = path.parse(importPath); + const newPath = [importInfo.dir, webViewTempDir, importInfo.base].join("/"); + const finalModuleSource = `${quote}${newPath}${quote}`; + + console.log(importInfo); + console.log(`${moduleSourceRaw} -> ${finalModuleSource}`); + return finalModuleSource; +} From 518deb007c58ad351f1d41867e34880b34b68470 Mon Sep 17 00:00:00 2001 From: tjcouch-sil Date: Tue, 9 May 2023 09:22:54 -0500 Subject: [PATCH 14/61] Got two-step vite build working, changed React webviews to use global variable instead of component name to prevent tree shaking --- lib/extension-template.web-view.tsx | 2 +- lib/main.ts | 1 - package.json | 9 +- vite/vite-web-view.config.ts | 143 ++++++++++++++-------------- vite/vite.config.ts | 124 ++++++++++-------------- vite/vite.util.ts | 7 +- 6 files changed, 133 insertions(+), 153 deletions(-) diff --git a/lib/extension-template.web-view.tsx b/lib/extension-template.web-view.tsx index 4fa619e..4094853 100644 --- a/lib/extension-template.web-view.tsx +++ b/lib/extension-template.web-view.tsx @@ -11,7 +11,7 @@ const { logger, } = papi; -export function ExtensionTemplateReact() { +globalThis.webViewComponent = function ExtensionTemplateReact() { const [clicks, setClicks] = useState(0); const quickVerseDataProvider = useDataProvider( diff --git a/lib/main.ts b/lib/main.ts index 1b3bb20..8b34e6c 100644 --- a/lib/main.ts +++ b/lib/main.ts @@ -147,7 +147,6 @@ export async function activate() { ]; papi.webViews.addWebView({ - componentName: "ExtensionTemplateReact", contents: extensionTemplateReact, styles: extensionTemplateReactStyles, }); diff --git a/package.json b/package.json index 5074b25..1e21083 100644 --- a/package.json +++ b/package.json @@ -4,9 +4,12 @@ "version": "0.0.1", "type": "module", "scripts": { - "build:vite": "vite build --config vite/vite-web-view.config.ts", - "build:vite2": " vite build --config vite/vite.config.ts", - "start:vite": "vite build --watch --config vite/vite.config.ts", + "build:vite1": "vite build --config vite/vite-web-view.config.ts", + "build:vite2": "vite build --config vite/vite.config.ts", + "build:vite": "build:vite1 && build:vite2", + "start:vite1": "vite build --watch --config vite/vite-web-view.config.ts", + "start:vite2": "vite build --watch --config vite/vite.config.ts", + "start:vite": "concurrently \"npm:start:vite1\" \"npm:start:vite2\"", "lint": "tsc", "start:core": "cd ../paranext-core && npm run start", "start": "cross-env MAIN_ARGS=\"--extensions $INIT_CWD/dist\" concurrently \"npm:start:vite\" \"npm:start:core\"", diff --git a/vite/vite-web-view.config.ts b/vite/vite-web-view.config.ts index 7a2cf74..64654ee 100644 --- a/vite/vite-web-view.config.ts +++ b/vite/vite-web-view.config.ts @@ -15,80 +15,81 @@ import { webViewTsxGlob, } from "./vite.util"; -/** List of TypeScript WebView files to transpile */ -const tsxWebViews = getWebViewTsxPaths(); +// https://vitejs.dev/config/ +export default defineConfig(async () => { + /** List of TypeScript WebView files to transpile */ + const tsxWebViews = await getWebViewTsxPaths(); -/** Tracks which entry file we're working with in determining the file name. */ -let entryFileIndex = 0; + /** Tracks which entry file we're working with in determining the file name. */ + let entryFileIndex = 0; -// https://vitejs.dev/config/ -export default defineConfig({ - plugins: [ - // use React.createElement - react({ jsxRuntime: "classic" }), - // Remove the Paranext global modules from the imports in React web views because they are provided globally - importManager({ - include: webViewTsxGlob, - units: paranextProvidedModules.map((module) => ({ - // Match the whole module name, nothing more, nothing less - module: - new RegExp(`^${escapeStringRegexp(module)}$`), - actions: "remove", - })), - }), - ], - build: { - // This project is a library as it is being used in Paranext - lib: { - // List each WebView file as an entry file because each needs to be transpiled - entry: tsxWebViews.map((webView) => path.resolve(__dirname, "../", webView)), - /** - * Get the output file name for each WebView. - * - * WARNING: We're assuming the file name function runs in order. We will - * throw if we notice any issues with this assumption, but there is a - * possibility that two different WebViews named the same in two different - * files could get swapped if Vite doesn't play by our assumption. - */ - fileName: (moduleFormat, entryName) => { - // Get the corresponding webView file for this entry - const webViewFilePath = tsxWebViews[entryFileIndex]; - const webViewFileInfo = path.parse(webViewFilePath); - if (entryName !== webViewFileInfo.name) - throw new Error( - `Error building in Vite: entryName ${entryName} does not match WebView file name ${webViewFileInfo.name}! File path: ${webViewFilePath} entryFileIndex ${entryFileIndex}` - ); - // Set up the next call to this function to get the next WebView file - entryFileIndex += 1; + return { + plugins: [ + // use React.createElement + react({ jsxRuntime: "classic" }), + // Remove the Paranext global modules from the imports in React web views because they are provided globally + importManager({ + include: webViewTsxGlob, + units: paranextProvidedModules.map((module) => ({ + // Match the whole module name, nothing more, nothing less + module: new RegExp(`^${escapeStringRegexp(module)}$`), + actions: "remove", + })), + }), + ], + build: { + // This project is a library as it is being used in Paranext + lib: { + // List each WebView file as an entry file because each needs to be transpiled + entry: tsxWebViews.map((webView) => + path.resolve(__dirname, "../", webView) + ), + /** + * Get the output file name for each WebView. + * + * WARNING: We're assuming the file name function runs in order. We will + * throw if we notice any issues with this assumption, but there is a + * possibility that two different WebViews named the same in two different + * files could get swapped if Vite doesn't play by our assumption. + */ + fileName: (moduleFormat, entryName) => { + // Get the corresponding webView file for this entry + const webViewFilePath = + tsxWebViews[entryFileIndex % tsxWebViews.length]; + const webViewFileInfo = path.parse(webViewFilePath); + if (entryName !== webViewFileInfo.name) + throw new Error( + `Error building in Vite: entryName ${entryName} does not match WebView file name ${webViewFileInfo.name}! File path: ${webViewFilePath} entryFileIndex ${entryFileIndex}` + ); + // Set up the next call to this function to get the next WebView file + entryFileIndex += 1; - // Put transpiled WebViews in a temp folder in the same directory as the original WebView - return path.join( - webViewFileInfo.dir, - webViewTempDir, - `${webViewFileInfo.name}.${getFileExtensionByModuleFormat( - moduleFormat - )}` - ); + // Put transpiled WebViews in a temp folder in the same directory as the original WebView + return path.join( + webViewFileInfo.dir, + webViewTempDir, + `${webViewFileInfo.name}.${getFileExtensionByModuleFormat( + moduleFormat + )}` + ); + }, + // Output to cjs format as that's what Paranext supports. In production, es modules fail to + // shim over import and deliver papi for some reason. + formats: ["cjs"], }, - // Output to cjs format as that's what Paranext supports. In production, es modules fail to - // shim over import and deliver papi for some reason. - formats: ["cjs"], - }, - rollupOptions: { - // Do not bundle papi because it will be imported in Paranext - external: paranextProvidedModules, + rollupOptions: { + // Do not bundle papi because it will be imported in Paranext + external: paranextProvidedModules, + }, + // Bundle the sourcemap into the webview file since it will be injected as a string + // into the main file + sourcemap: "inline", + // We are placing the built WebView files next to their original files + outDir: "", + // We do not want to erase the entire project! + emptyOutDir: false, + // We do not want to copy the public files as we will do that in the next build step + copyPublicDir: false, }, - // Bundle the sourcemap into the webview file since it will be injected as a string - // into the main file - sourcemap: "inline", - // We are placing the built WebView files next to their original files - outDir: "", - // We do not want to erase the entire project! - emptyOutDir: false, - // We do not want to copy the public files as we will do that in the next build step - copyPublicDir: false, - }, - /* esbuild: { - reserveProps: /ExtensionTemplateReact/, - }, */ + }; }); diff --git a/vite/vite.config.ts b/vite/vite.config.ts index 31df1a4..2da5a8c 100644 --- a/vite/vite.config.ts +++ b/vite/vite.config.ts @@ -18,81 +18,61 @@ import { getFileExtensionByModuleFormat, } from "./vite.util"; -/** List of TypeScript WebView files transpiled in the first build step */ -const tsxWebViews = getWebViewTsxPaths(); - // https://vitejs.dev/config/ -export default defineConfig({ - plugins: [ - // Redirect WebView imports to their version built in the first build step - importManager({ - // Need to include all files that could import WebViews - include: "**/*.{ts,tsx,js,jsx}", - units: tsxWebViews.map((webView) => { - const webViewInfo = path.parse(webView); - // Get the file name without the extension if it is tsx as tsx is inferred when importing - const webViewModuleName = - webViewInfo.ext === ".tsx" ? webViewInfo.name : webViewInfo.base; - return { - module: - // Match the whole module name, nothing more, nothing less - new RegExp(`^${escapeStringRegexp(webViewModuleName)}$`), - actions: { - select: "module", - rename: insertWebViewTempDir, - }, - }; - }), - }), - // Import web view files as strings to pass on the papi - // importString plugin must be after any other plugins that need to transpile these files - { - ...importString({ - include: [webViewGlob, webViewTempGlob], +export default defineConfig(async () => { + /** List of TypeScript WebView files transpiled in the first build step */ + const tsxWebViews = await getWebViewTsxPaths(); + + return { + plugins: [ + // Redirect WebView imports to their version built in the first build step + importManager({ + // Need to include all files that could import WebViews + include: "**/*.{ts,tsx,js,jsx}", + units: tsxWebViews.map((webView) => { + const webViewInfo = path.parse(webView); + // Get the file name without the extension if it is tsx as tsx is inferred when importing + const webViewModuleName = + webViewInfo.ext === ".tsx" ? webViewInfo.name : webViewInfo.base; + return { + module: + // Match the whole module name, nothing more, nothing less + new RegExp(`^${escapeStringRegexp(webViewModuleName)}$`), + actions: { + select: "module", + rename: insertWebViewTempDir, + }, + }; + }), }), - enforce: "post", - }, - ], - build: { - // This project is a library as it is being used in Paranext - lib: { - // The main entry file of the extension - entry: path.resolve(__dirname, "../lib/main.ts"), - // The output file name for the extension (file extension is appended) - fileName: (moduleFormat, entryName) => - `paranext-extension-template.${getFileExtensionByModuleFormat( - moduleFormat - )}`, - // Output to cjs format as that's what Paranext supports - formats: ["cjs"], - }, - rollupOptions: { - // Do not bundle papi because it will be imported in Paranext - external: paranextProvidedModules, - }, - // Generate sourcemaps as separate files since VSCode can load them directly - sourcemap: true, - }, - /* resolve: { - alias: [ + // Import web view files as strings to pass on the papi + // importString plugin must be after any other plugins that need to transpile these files { - find: webViewTsxImportRegex, - // Pass the whole import string into the resolver - replacement: '$&', - customResolver(source, importer) { - const webViewFileInfo = path.parse(source); - const importerInfo = path.parse(importer); - const finalPath = path.resolve( - importerInfo.dir, - webViewFileInfo.dir, - webViewTempDir, - // If there is no file extension (parsed as the extension being .web-view), put js on it - webViewFileInfo.ext === '.web-view' ? `${webViewFileInfo.base}.js` : webViewFileInfo.base - ); - console.log(`${source} -> ${finalPath}`); - return finalPath; - }, + ...importString({ + include: [webViewGlob, webViewTempGlob], + }), + enforce: "post", }, ], - }, */ + build: { + // This project is a library as it is being used in Paranext + lib: { + // The main entry file of the extension + entry: path.resolve(__dirname, "../lib/main.ts"), + // The output file name for the extension (file extension is appended) + fileName: (moduleFormat, entryName) => + `paranext-extension-template.${getFileExtensionByModuleFormat( + moduleFormat + )}`, + // Output to cjs format as that's what Paranext supports + formats: ["cjs"], + }, + rollupOptions: { + // Do not bundle papi because it will be imported in Paranext + external: paranextProvidedModules, + }, + // Generate sourcemaps as separate files since VSCode can load them directly + sourcemap: true, + }, + }; }); diff --git a/vite/vite.util.ts b/vite/vite.util.ts index 0707dea..b403721 100644 --- a/vite/vite.util.ts +++ b/vite/vite.util.ts @@ -1,6 +1,6 @@ import path from "path"; import { ModuleFormat } from "rollup"; -import { globSync } from "glob"; +import { glob } from "glob"; /** * Glob filename matcher for web views. @@ -52,7 +52,7 @@ export function getFileExtensionByModuleFormat(moduleFormat: ModuleFormat) { * Path relative to project root */ export function getWebViewTsxPaths() { - return globSync(webViewTsxGlob, { ignore: "node_modules/**" }); + return glob(webViewTsxGlob, { ignore: "node_modules/**" }); } /** @@ -68,8 +68,5 @@ export function insertWebViewTempDir(moduleSourceRaw: string) { const importInfo = path.parse(importPath); const newPath = [importInfo.dir, webViewTempDir, importInfo.base].join("/"); const finalModuleSource = `${quote}${newPath}${quote}`; - - console.log(importInfo); - console.log(`${moduleSourceRaw} -> ${finalModuleSource}`); return finalModuleSource; } From 4172c2629bcba90f2bb7f4727ed3e34cb0cc3f43 Mon Sep 17 00:00:00 2001 From: tjcouch-sil Date: Tue, 9 May 2023 11:07:03 -0500 Subject: [PATCH 15/61] Cleanup --- .vscode/launch.json | 10 +--------- lib/extension-template.web-view.tsx | 2 +- vite/vite-web-view.config.ts | 8 +++++--- 3 files changed, 7 insertions(+), 13 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 4b28197..5f94d96 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -21,15 +21,7 @@ "runtimeArgs": ["run", "build:vite"] }, { - "name": "Build Extension 2", - "type": "node", - "request": "launch", - "runtimeExecutable": "npm", - "skipFiles": ["/**"], - "runtimeArgs": ["run", "build:vite2"] - }, - { - "name": "Debug Paranext Core", + "name": "Debug Paranext Core with Extension", "type": "node", "request": "launch", "runtimeExecutable": "npm", diff --git a/lib/extension-template.web-view.tsx b/lib/extension-template.web-view.tsx index 4094853..39e9fec 100644 --- a/lib/extension-template.web-view.tsx +++ b/lib/extension-template.web-view.tsx @@ -11,7 +11,7 @@ const { logger, } = papi; -globalThis.webViewComponent = function ExtensionTemplateReact() { +globalThis.webViewComponent = function() { const [clicks, setClicks] = useState(0); const quickVerseDataProvider = useDataProvider( diff --git a/vite/vite-web-view.config.ts b/vite/vite-web-view.config.ts index 64654ee..8e765f5 100644 --- a/vite/vite-web-view.config.ts +++ b/vite/vite-web-view.config.ts @@ -54,15 +54,17 @@ export default defineConfig(async () => { */ fileName: (moduleFormat, entryName) => { // Get the corresponding webView file for this entry - const webViewFilePath = - tsxWebViews[entryFileIndex % tsxWebViews.length]; + const webViewFilePath = tsxWebViews[entryFileIndex]; const webViewFileInfo = path.parse(webViewFilePath); if (entryName !== webViewFileInfo.name) throw new Error( `Error building in Vite: entryName ${entryName} does not match WebView file name ${webViewFileInfo.name}! File path: ${webViewFilePath} entryFileIndex ${entryFileIndex}` ); + // Set up the next call to this function to get the next WebView file - entryFileIndex += 1; + // Vite does not get the config every time it rebuilds during watching, so we need to wrap the index manually as + // Vite does not re-run the config and set the index back to zero + entryFileIndex = (entryFileIndex + 1) % tsxWebViews.length; // Put transpiled WebViews in a temp folder in the same directory as the original WebView return path.join( From bd11174f19033d2b6198f558aa5ff2c23ebac76a Mon Sep 17 00:00:00 2001 From: tjcouch-sil Date: Tue, 9 May 2023 13:38:52 -0500 Subject: [PATCH 16/61] Fixed build:vite, cleanup --- README.md | 1 + lib/test/test.web-view.tsx | 52 ------------------------- package.json | 4 +- public/paranext-extension-template.d.ts | 2 +- vite/vite.config.ts | 2 - 5 files changed, 4 insertions(+), 57 deletions(-) delete mode 100644 lib/test/test.web-view.tsx diff --git a/README.md b/README.md index 533c15f..d8e8a4c 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,7 @@ Basic extension template for Paranext ## Summary This is a Vite project template pre-configured to build Paranext extensions. + - `lib` contains the source code for the extension - `lib/main.ts` is the main entry file for the extension - `*.web-view.tsx` files will be treated as React WebViews diff --git a/lib/test/test.web-view.tsx b/lib/test/test.web-view.tsx deleted file mode 100644 index 4fa619e..0000000 --- a/lib/test/test.web-view.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import papi from "papi"; -import React from "react"; -import { QuickVerseDataProvider } from "extension-types"; - -const { useState } = React; -const { - react: { - hooks: { useData, useDataProvider }, - components: { Button }, - }, - logger, -} = papi; - -export function ExtensionTemplateReact() { - const [clicks, setClicks] = useState(0); - - const quickVerseDataProvider = useDataProvider( - "paranext-extension-template.quick-verse" - ); - - const [latestVerseText] = useData( - quickVerseDataProvider, - "latest", - "Loading latest Scripture text..." - ); - - return ( - <> -
Extension Template React
-
{latestVerseText}
-
- -
- - ); -} diff --git a/package.json b/package.json index 1e21083..8eae98e 100644 --- a/package.json +++ b/package.json @@ -6,13 +6,13 @@ "scripts": { "build:vite1": "vite build --config vite/vite-web-view.config.ts", "build:vite2": "vite build --config vite/vite.config.ts", - "build:vite": "build:vite1 && build:vite2", + "build:vite": "npm run build:vite1 && npm run build:vite2", "start:vite1": "vite build --watch --config vite/vite-web-view.config.ts", "start:vite2": "vite build --watch --config vite/vite.config.ts", "start:vite": "concurrently \"npm:start:vite1\" \"npm:start:vite2\"", - "lint": "tsc", "start:core": "cd ../paranext-core && npm run start", "start": "cross-env MAIN_ARGS=\"--extensions $INIT_CWD/dist\" concurrently \"npm:start:vite\" \"npm:start:core\"", + "lint": "tsc", "postinstall": "patch-package" }, "dependencies": { diff --git a/public/paranext-extension-template.d.ts b/public/paranext-extension-template.d.ts index 7dd1654..1034f17 100644 --- a/public/paranext-extension-template.d.ts +++ b/public/paranext-extension-template.d.ts @@ -5,4 +5,4 @@ export type QuickVerseSetData = string | { text: string; isHeresy: boolean }; export interface QuickVerseDataProvider extends IDataProvider { setHeresy(verseRef: string, verseText: string): Promise; -} \ No newline at end of file +} diff --git a/vite/vite.config.ts b/vite/vite.config.ts index 2da5a8c..c9f5735 100644 --- a/vite/vite.config.ts +++ b/vite/vite.config.ts @@ -10,8 +10,6 @@ import { string as importString } from "rollup-plugin-string"; import { paranextProvidedModules, webViewGlob, - webViewTsxImportRegex, - webViewTempDir, getWebViewTsxPaths, insertWebViewTempDir, webViewTempGlob, From 33c05675eae06782eb249932747c2ac8bb005270 Mon Sep 17 00:00:00 2001 From: FoolRunning Date: Wed, 10 May 2023 13:50:16 -0400 Subject: [PATCH 17/61] Small fix to the readme --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d8e8a4c..b756e16 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ Note: The built extension will be in the `dist` folder. In order for Paranext to To watch extension files (in `lib`) for changes: -`npm start:vite` +`npm run start:vite` To build the extension once: @@ -67,4 +67,4 @@ Vite packages the extension together into the `dist` folder: - Injects the WebViews into the main file - Packages dependencies into the main file - Generates sourcemaps for the file -- Packages everything up into an extension folder in `dist` \ No newline at end of file +- Packages everything up into an extension folder in `dist` From 04a478c9925adb70b7273a82b3332abb0bc73624 Mon Sep 17 00:00:00 2001 From: tjcouch-sil Date: Mon, 15 May 2023 09:48:14 -0500 Subject: [PATCH 18/61] Some cleanup, adding comments where config is shared with paranext-core --- package-lock.json | 48 ------------------------------------ package.json | 1 - vite/vite-web-view.config.ts | 8 +++++- vite/vite.config.ts | 8 ++++-- vite/vite.util.ts | 4 +++ 5 files changed, 17 insertions(+), 52 deletions(-) diff --git a/package-lock.json b/package-lock.json index 900d1dd..527171c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,6 @@ "react-dom": "^18.2.0" }, "devDependencies": { - "@rollup/plugin-alias": "^5.0.0", "@types/node": "^18.15.11", "@types/react": "^18.0.28", "@types/react-dom": "^18.0.11", @@ -902,26 +901,6 @@ "node": ">=14" } }, - "node_modules/@rollup/plugin-alias": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-alias/-/plugin-alias-5.0.0.tgz", - "integrity": "sha512-l9hY5chSCjuFRPsnRm16twWBiSApl2uYFLsepQYwtBuAxNMQ/1dJqADld40P0Jkqm65GRTLy/AC6hnpVebtLsA==", - "dev": true, - "dependencies": { - "slash": "^4.0.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, "node_modules/@rollup/pluginutils": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", @@ -2559,18 +2538,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/source-map-js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", @@ -3517,15 +3484,6 @@ "dev": true, "optional": true }, - "@rollup/plugin-alias": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-alias/-/plugin-alias-5.0.0.tgz", - "integrity": "sha512-l9hY5chSCjuFRPsnRm16twWBiSApl2uYFLsepQYwtBuAxNMQ/1dJqADld40P0Jkqm65GRTLy/AC6hnpVebtLsA==", - "dev": true, - "requires": { - "slash": "^4.0.0" - } - }, "@rollup/pluginutils": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", @@ -4714,12 +4672,6 @@ "integrity": "sha512-uUWsN4aOxJAS8KOuf3QMyFtgm1pkb6I+KRZbRF/ghdf5T7sM+B1lLLzPDxswUjkmHyxQAVzEgG35E3NzDM9GVw==", "dev": true }, - "slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true - }, "source-map-js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", diff --git a/package.json b/package.json index 8eae98e..a26200d 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,6 @@ "react-dom": "^18.2.0" }, "devDependencies": { - "@rollup/plugin-alias": "^5.0.0", "@types/node": "^18.15.11", "@types/react": "^18.0.28", "@types/react-dom": "^18.0.11", diff --git a/vite/vite-web-view.config.ts b/vite/vite-web-view.config.ts index 8e765f5..ca90960 100644 --- a/vite/vite-web-view.config.ts +++ b/vite/vite-web-view.config.ts @@ -1,3 +1,5 @@ +// #region Shared with https://github.com/paranext/paranext-core/blob/main/vite/vite-web-view.config.ts + /** * First Vite build step for transpiling TypeScript WebViews */ @@ -16,7 +18,7 @@ import { } from "./vite.util"; // https://vitejs.dev/config/ -export default defineConfig(async () => { +const webViewConfig = defineConfig(async () => { /** List of TypeScript WebView files to transpile */ const tsxWebViews = await getWebViewTsxPaths(); @@ -95,3 +97,7 @@ export default defineConfig(async () => { }, }; }); + +export default webViewConfig; + +// #endregion diff --git a/vite/vite.config.ts b/vite/vite.config.ts index c9f5735..852bf2b 100644 --- a/vite/vite.config.ts +++ b/vite/vite.config.ts @@ -17,12 +17,13 @@ import { } from "./vite.util"; // https://vitejs.dev/config/ -export default defineConfig(async () => { +const extensionConfig = defineConfig(async () => { /** List of TypeScript WebView files transpiled in the first build step */ const tsxWebViews = await getWebViewTsxPaths(); return { plugins: [ + // Shared with https://github.com/paranext/paranext-core/blob/main/vite/vite.config.ts // Redirect WebView imports to their version built in the first build step importManager({ // Need to include all files that could import WebViews @@ -43,12 +44,13 @@ export default defineConfig(async () => { }; }), }), + // Shared with https://github.com/paranext/paranext-core/blob/main/vite/vite.config.ts // Import web view files as strings to pass on the papi - // importString plugin must be after any other plugins that need to transpile these files { ...importString({ include: [webViewGlob, webViewTempGlob], }), + // importString plugin must be after any other plugins that need to transpile these files enforce: "post", }, ], @@ -74,3 +76,5 @@ export default defineConfig(async () => { }, }; }); + +export default extensionConfig; diff --git a/vite/vite.util.ts b/vite/vite.util.ts index b403721..e7cec09 100644 --- a/vite/vite.util.ts +++ b/vite/vite.util.ts @@ -2,6 +2,8 @@ import path from "path"; import { ModuleFormat } from "rollup"; import { glob } from "glob"; +// #region shared with https://github.com/paranext/paranext-core/blob/main/vite/vite.util.ts + /** * Glob filename matcher for web views. * React Web Views should be named .web-view.tsx @@ -70,3 +72,5 @@ export function insertWebViewTempDir(moduleSourceRaw: string) { const finalModuleSource = `${quote}${newPath}${quote}`; return finalModuleSource; } + +// #endregion From 85d2c3c0d3b12a0199f8956bf2c814634c0d3400 Mon Sep 17 00:00:00 2001 From: tjcouch-sil Date: Mon, 15 May 2023 09:54:51 -0500 Subject: [PATCH 19/61] Upgraded to latest rollup-plugin-import-manager which includes the patch we made --- package-lock.json | 39 ++-- package.json | 5 +- patches/import-manager+0.3.3.patch | 221 ------------------ .../rollup-plugin-import-manager+0.5.3.patch | 26 --- 4 files changed, 21 insertions(+), 270 deletions(-) delete mode 100644 patches/import-manager+0.3.3.patch delete mode 100644 patches/rollup-plugin-import-manager+0.5.3.patch diff --git a/package-lock.json b/package-lock.json index 527171c..b2a0fbb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,7 +7,6 @@ "": { "name": "paranext-extension-template", "version": "0.0.1", - "hasInstallScript": true, "dependencies": { "react": "^18.2.0", "react-dom": "^18.2.0" @@ -23,7 +22,7 @@ "glob": "^10.2.2", "papi-dts": "file:../paranext-core/lib/papi-dts", "patch-package": "^7.0.0", - "rollup-plugin-import-manager": "^0.5.3", + "rollup-plugin-import-manager": "^0.6.1", "rollup-plugin-string": "^3.0.0", "sass": "^1.62.1", "typescript": "^4.9.3", @@ -1705,14 +1704,14 @@ "dev": true }, "node_modules/import-manager": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/import-manager/-/import-manager-0.3.3.tgz", - "integrity": "sha512-24HG+yEe9zaMo7ltWnJMO381suXUi29OHi4kR7ecmDgoar8G+P0kPMf/692EWJKBkfY/DG/1zQZu47/T/DK7Hw==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/import-manager/-/import-manager-0.4.1.tgz", + "integrity": "sha512-pp+HGlNqBHSt3qKBuvD1TsKm26Ysb+6Fy57tdRYfAi6jb+oiaAES5BKZblnREjOso6zbXCcMHI2vQvuMn8ZdoQ==", "dev": true, "dependencies": { "acorn": "^8.8.2", "acorn-walk": "^8.2.0", - "colorette": "^2.0.19", + "colorette": "^2.0.20", "magic-string": "^0.30.0" } }, @@ -2424,15 +2423,15 @@ } }, "node_modules/rollup-plugin-import-manager": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/rollup-plugin-import-manager/-/rollup-plugin-import-manager-0.5.3.tgz", - "integrity": "sha512-ZtrATwGcHmoAaNCyZbeV0MDhCY9H4JGZphlQ03dmCVpXBQdi0DUS+NCjSurr1egUCEaA7h+dWMQ5a4FUeVRHJw==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-import-manager/-/rollup-plugin-import-manager-0.6.1.tgz", + "integrity": "sha512-OGdtwxSqMvB6549wS4rq0rmfow3SLaUtYlDsaSRVHTpCkekqna9bpavz+3zo05M5LM3iO1aMCahpWpRIItVLtA==", "dev": true, "dependencies": { "@rollup/pluginutils": "^5.0.2", - "colorette": "^2.0.19", + "colorette": "^2.0.20", "diff": "^5.1.0", - "import-manager": "^0.3.3" + "import-manager": "^0.4.1" } }, "node_modules/rollup-plugin-string": { @@ -4064,14 +4063,14 @@ "dev": true }, "import-manager": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/import-manager/-/import-manager-0.3.3.tgz", - "integrity": "sha512-24HG+yEe9zaMo7ltWnJMO381suXUi29OHi4kR7ecmDgoar8G+P0kPMf/692EWJKBkfY/DG/1zQZu47/T/DK7Hw==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/import-manager/-/import-manager-0.4.1.tgz", + "integrity": "sha512-pp+HGlNqBHSt3qKBuvD1TsKm26Ysb+6Fy57tdRYfAi6jb+oiaAES5BKZblnREjOso6zbXCcMHI2vQvuMn8ZdoQ==", "dev": true, "requires": { "acorn": "^8.8.2", "acorn-walk": "^8.2.0", - "colorette": "^2.0.19", + "colorette": "^2.0.20", "magic-string": "^0.30.0" }, "dependencies": { @@ -4582,15 +4581,15 @@ } }, "rollup-plugin-import-manager": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/rollup-plugin-import-manager/-/rollup-plugin-import-manager-0.5.3.tgz", - "integrity": "sha512-ZtrATwGcHmoAaNCyZbeV0MDhCY9H4JGZphlQ03dmCVpXBQdi0DUS+NCjSurr1egUCEaA7h+dWMQ5a4FUeVRHJw==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-import-manager/-/rollup-plugin-import-manager-0.6.1.tgz", + "integrity": "sha512-OGdtwxSqMvB6549wS4rq0rmfow3SLaUtYlDsaSRVHTpCkekqna9bpavz+3zo05M5LM3iO1aMCahpWpRIItVLtA==", "dev": true, "requires": { "@rollup/pluginutils": "^5.0.2", - "colorette": "^2.0.19", + "colorette": "^2.0.20", "diff": "^5.1.0", - "import-manager": "^0.3.3" + "import-manager": "^0.4.1" } }, "rollup-plugin-string": { diff --git a/package.json b/package.json index a26200d..1a492f4 100644 --- a/package.json +++ b/package.json @@ -12,8 +12,7 @@ "start:vite": "concurrently \"npm:start:vite1\" \"npm:start:vite2\"", "start:core": "cd ../paranext-core && npm run start", "start": "cross-env MAIN_ARGS=\"--extensions $INIT_CWD/dist\" concurrently \"npm:start:vite\" \"npm:start:core\"", - "lint": "tsc", - "postinstall": "patch-package" + "lint": "tsc" }, "dependencies": { "react": "^18.2.0", @@ -30,7 +29,7 @@ "glob": "^10.2.2", "papi-dts": "file:../paranext-core/lib/papi-dts", "patch-package": "^7.0.0", - "rollup-plugin-import-manager": "^0.5.3", + "rollup-plugin-import-manager": "^0.6.1", "rollup-plugin-string": "^3.0.0", "sass": "^1.62.1", "typescript": "^4.9.3", diff --git a/patches/import-manager+0.3.3.patch b/patches/import-manager+0.3.3.patch deleted file mode 100644 index 3c59295..0000000 --- a/patches/import-manager+0.3.3.patch +++ /dev/null @@ -1,221 +0,0 @@ -diff --git a/node_modules/import-manager/README.md b/node_modules/import-manager/README.md -index 5754a5f..7451c36 100644 ---- a/node_modules/import-manager/README.md -+++ b/node_modules/import-manager/README.md -@@ -49,7 +49,7 @@ Methods, callable from manager instance. - Analyzes the source and stores all import statements as unit objects in the [imports object](#imports-object). - - ##### `selectModByName(name, type, allowNull)` --Searches `this.imports` for the given module _name_. If _type_ is provided (`cjs`/`dynamic`/`es6`), it only searches for the module in that category. If _allowNull_ `false` the module must be found or a [`MatchError`](#matcherror -+Searches `this.imports` for the given module _name_ (`String` | `RegExp`). If _type_ is provided (`cjs`/`dynamic`/`es6`), it only searches for the module in that category. If _allowNull_ `false` the module must be found or a [`MatchError`](#matcherror - ) is thrown. - - ##### `selectModById(id, allowNull)` -@@ -100,6 +100,8 @@ Methods callable from a unit object. - ##### `renameModule(name, modType)` - Changes the _name_ -> module (path). _modType_ can be `"string"` which adds quotation marks around _name_ or `"raw"`, which doesn't and can be used to pass variables if valid for the import type. - -+EDIT: name can alternatively be (moduleSourceRaw: string) => string where moduleSourceRaw is the module's source code including quotes if _modType_ is `"string"`. -+ - ##### `addDefaultMembers(names)` - _names_ is an array of strings (even for the most common case of a single member) of default members to add to the unit. _[es6 only]_ - -diff --git a/node_modules/import-manager/cjs/import-manager.cjs b/node_modules/import-manager/cjs/import-manager.cjs -index 7e54a1e..c6766a3 100644 ---- a/node_modules/import-manager/cjs/import-manager.cjs -+++ b/node_modules/import-manager/cjs/import-manager.cjs -@@ -79,21 +79,27 @@ class ImportManagerUnitMethods { - - /** - * Changes the module part of a import statement. -- * @param {string} name - The new module part/path. -+ * @param {string | (moduleSourceRaw: string) => string} name - The new module part/path or a function -+ * that receives the module's raw source code (including quotes if present) and returns the new module part/path. - * @param {*} modType - Module type (literal|raw). -+ * EDIT: Added support for name (aka rename in rollup plugin action) to be a function - */ - renameModule(name, modType) { -- if (modType === "string") { -- if (!this.unit.module.quotes) { -- this.unit.module.quotes = "\""; -+ const isNameAFn = typeof name === 'function'; -+ -+ if (!isNameAFn) { -+ if (modType === "string") { -+ if (!this.unit.module.quotes) { -+ this.unit.module.quotes = "\""; -+ } -+ const q = this.unit.module.quotes; -+ name = q + name + q; -+ } else if (modType !== "raw") { -+ throw new TypeError(`Unknown modType '${modType}'. Valid types are 'string' and 'raw'.`); - } -- const q = this.unit.module.quotes; -- name = q + name + q; -- } else if (modType !== "raw") { -- throw new TypeError(`Unknown modType '${modType}'. Valid types are 'string' and 'raw'.`); - } - -- this.unit.code.overwrite(this.unit.module.start, this.unit.module.end, name); -+ this.unit.code.overwrite(this.unit.module.start, this.unit.module.end, isNameAFn ? name(this.unit.module.sourceRaw) : name); - - if (this.unit.type === "es6") { - this.updateUnit(); -@@ -700,7 +706,9 @@ class ImportManager { - start: node.source.start - node.start, - end: node.source.end - node.start, - type: "string", -- quotes: node.source.raw.at(0) -+ quotes: node.source.raw.at(0), -+ // EDIT: added module's raw source code -+ sourceRaw: node.source.raw - }; - - -@@ -732,7 +740,9 @@ class ImportManager { - const module = { - name: importObject.source.value.split("/").at(-1) || "N/A", - start: importObject.source.start - node.start, -- end: importObject.source.end - node.start -+ end: importObject.source.end - node.start, -+ // EDIT: added module's raw source code -+ sourceRaw: importObject.source.raw - }; - - if (importObject.source.type === "Literal") { -@@ -768,7 +778,9 @@ class ImportManager { - const module = { - name: modulePart.value.split("/").at(-1) || "N/A", - start: modulePart.start - node.start, -- end: modulePart.end - node.start -+ end: modulePart.end - node.start, -+ // EDIT: added module's raw source code -+ sourceRaw: modulePart.raw - }; - - if (modulePart.type === "Literal") { -@@ -829,7 +841,7 @@ class ImportManager { - - /** - * Selects a unit by its module name. -- * @param {string} name - Module Name. -+ * @param {string|RegExp} name - Module Name. - * @param {string|string[]} [type] - "cjs", "dynamic", "es6" one as a string or multiple as array of strings - * @param {boolean} allowNull - If false the module must be found or a MatchError is thrown. - * @returns {Object} - An explicit unit. -@@ -867,7 +879,8 @@ class ImportManager { - - // filter for unit name - const units = unitList.filter(unit => { -- const match = unit.module.name.indexOf(name) > -1; -+ // EDIT: unit.module can now be a string or a regex -+ const match = name instanceof RegExp ? unit.module.name !== undefined && name.test(unit.module.name) : unit.module.name.indexOf(name) > -1; - - // ignore deleted units - if (match && unit.module.name.match(/^\(deleted\)/)) { -diff --git a/node_modules/import-manager/cjs/import-manager.cjs.map b/node_modules/import-manager/cjs/import-manager.cjs.map -index 7c48792..74fad9d 100644 ---- a/node_modules/import-manager/cjs/import-manager.cjs.map -+++ b/node_modules/import-manager/cjs/import-manager.cjs.map -@@ -1 +1 @@ --{"version":3,"file":"import-manager.cjs","sources":["../src/errors.js","../src/unit-methods.js","../src/core.js"],"sourcesContent":["/**\n * Custom error to tell the user, that it is\n * not possible to select a specific unit.\n */\nclass MatchError extends Error {\n constructor(message) {\n super(message);\n this.name = \"MatchError\";\n }\n}\n\n/**\n * Custom error to abort the building process\n * for retrieving information.\n */\nclass DebuggingError extends Error {\n constructor(message) {\n if (typeof message !== \"string\") {\n message = JSON.stringify(message, null, 4);\n }\n super(message);\n this.name = \"DebuggingError\";\n }\n}\n\nexport { DebuggingError, MatchError };\n","import { DebuggingError, MatchError } from \"./errors.js\";\n\n/**\n * Creates methods for unit manipulation to\n * be attached to a requested unit.\n */\nexport default class ImportManagerUnitMethods {\n\n /**\n * Stores the handed over unit and creates\n * an update method.\n * @param {Object} unit - The unit a user requests \n * @param {*} es6NodeToUnit - Method to analyze a \n */\n constructor(unit, es6NodeToUnit) {\n this.unit = unit;\n\n // After a change in the code of a es6 unit is made\n // it gets analyzed again, which is very verbose,\n // but prevents errors. The \"MagicString\" does not\n // contain multiple changes at a time. The analysis\n // function is the same as for the initial file\n // analyses and gets handed over by the main class.\n\n this.updateUnit = () => {\n\n const unit = es6NodeToUnit(\n this.unit.code.toString(),\n this.unit.start,\n this.unit.end\n );\n\n Object.assign(this.unit, unit);\n\n };\n }\n\n\n /**\n * Makes sure, that the processed unit is of type 'es6'. \n */\n #ES6only() {\n if (this.unit.type !== \"es6\") {\n throw new Error(\"This method is only available for ES6 imports.\");\n }\n }\n\n\n /**\n * Changes the module part of a import statement.\n * @param {string} name - The new module part/path.\n * @param {*} modType - Module type (literal|raw).\n */\n renameModule(name, modType) {\n if (modType === \"string\") {\n if (!this.unit.module.quotes) {\n this.unit.module.quotes = \"\\\"\";\n }\n const q = this.unit.module.quotes;\n name = q + name + q;\n } else if (modType !== \"raw\") {\n throw new TypeError(`Unknown modType '${modType}'. Valid types are 'string' and 'raw'.`);\n }\n \n this.unit.code.overwrite(this.unit.module.start, this.unit.module.end, name);\n\n if (this.unit.type === \"es6\") {\n this.updateUnit();\n }\n }\n\n\n /**\n * Adds default members to the import statement.\n * @param {string[]} names - A list of default members to add.\n */\n addDefaultMembers(names) {\n this.#ES6only();\n\n let start; \n let defStr;\n let memberPart = null;\n\n // handle the case if default members already exist\n if (this.unit.defaultMembers.count > 0) {\n start = this.unit.defaultMembers.entities.at(-1).absEnd;\n defStr = this.unit.defaultMembers.separator \n + names.join(this.unit.defaultMembers.separator);\n this.unit.code.appendRight(start, defStr);\n }\n\n // handle the case if default members do not exist, \n // and also no non default members (the addition\n // needs to be appended left, otherwise is\n // interferes with the module part)\n else if (this.unit.members.count === 0) {\n start = this.unit.module.start;\n defStr = names.join(this.unit.members.separator);\n memberPart = defStr;\n defStr += \" from \";\n this.unit.code.appendLeft(start, defStr);\n }\n\n // handle the case if default members do not exist, \n // but non default members\n else {\n start = this.unit.members.start;\n defStr = names.join(this.unit.defaultMembers.separator)\n + this.unit.members.separator;\n this.unit.code.appendRight(start, defStr);\n }\n \n this.updateUnit(memberPart);\n }\n\n\n /**\n * Adds non default members to the import statement.\n * @param {string[]} names - A list of members to add. \n */\n addMembers(names) {\n this.#ES6only();\n\n let start; \n let memStr;\n let memberPart = null;\n \n // handle the case if members already exist\n if (this.unit.members.count > 0) {\n start = this.unit.members.entities.at(-1).absEnd;\n memStr = this.unit.members.separator \n + names.join(this.unit.members.separator);\n this.unit.code.appendRight(start, memStr);\n }\n\n // handle the case if members do not exist, \n // and also no default members (the addition\n // needs to be appended left, otherwise is\n // interferes with the module part)\n else if (this.unit.defaultMembers.count === 0) {\n start = this.unit.module.start;\n memStr = \"{ \"\n + names.join(this.unit.members.separator)\n + \" }\";\n memberPart = memStr;\n memStr += \" from \";\n this.unit.code.appendLeft(start, memStr);\n }\n\n // handle the case if members do not exist, \n // but default members\n else {\n start = this.unit.defaultMembers.end;\n memStr = this.unit.defaultMembers.separator\n + \"{ \"\n + names.join(this.unit.members.separator)\n + \" }\";\n this.unit.code.appendRight(start, memStr);\n }\n\n this.updateUnit(memberPart);\n }\n\n\n /**\n * Internal helper method to get the member type.\n * The user input distinguishes between member/defaultMember\n * and the plural versions of them. To prevent confusion in the\n * process of selecting the different styles in the unit, this\n * methods adds an \"s\" to the given string if missing and selects\n * the requested type.\n * @param {*} memberType \n * @returns \n */\n #getType(memberType) {\n if (memberType.at(-1) !== \"s\") {\n memberType += \"s\";\n }\n return this.unit[memberType];\n }\n\n\n /**\n * Internal helper method to find a specific member\n * or default member.\n * @param {string} memberType - member/defaultMember. \n * @param {string} name - (default) member name. \n * @returns {Object} - (default) member object.\n */\n #findMember(memberType, name) {\n if (!name) {\n throw new Error(`${memberType} name must be set.`);\n }\n const filtered = this.#getType(memberType).entities.filter(m => m.name === name);\n if (filtered.length !== 1) {\n throw new MatchError(`Unable to locate ${memberType} with name '${name}'`);\n }\n return filtered[0];\n }\n\n\n /**\n * Removes a (default) member.\n * @param {string} memberType - member|defaultMember\n * @param {string} name - Name of the (default) member \n */\n removeMember(memberType, name) {\n this.#ES6only();\n\n const member = this.#findMember(memberType, name);\n\n if (this.#getType(memberType).count === 1) {\n this.removeMembers(memberType);\n } \n\n else {\n let start;\n let end;\n \n if (member.next) {\n start = member.start;\n end = member.next;\n } else if (member.last) {\n start = member.last;\n end = member.absEnd;\n } else {\n start = member.start;\n end = member.absEnd;\n }\n\n this.unit.code.remove(start, end); \n this.updateUnit();\n\n }\n }\n\n\n /**\n * Removes an entire group of members or default members.\n * @param {string} membersType - member(s)|defaultMember(s) \n */\n removeMembers(membersType) {\n this.#ES6only();\n\n const isDefault = membersType.indexOf(\"default\") > -1;\n\n const members = this.#getType(membersType);\n const others = this.#getType(isDefault ? \"members\" : \"defaultMembers\");\n\n let memberPart = null;\n if (others.count > 0) {\n \n const start = !isDefault \n ? this.unit.defaultMembers.entities.at(-1).end\n : members.start;\n\n this.unit.code.remove(start, members.end);\n }\n\n else {\n this.unit.code.remove(members.start, this.unit.module.start);\n memberPart = \"\";\n }\n\n this.updateUnit(memberPart);\n }\n\n\n /**\n * Renames a single (default) member. The alias\n * can be kept or overwritten. \n * @param {string} memberType - member|defaultMember \n * @param {string} name - The (default) member to rename.\n * @param {string} newName - The new name of the (default) member.\n * @param {boolean} keepAlias - True if the alias shall be untouched. \n */\n renameMember(memberType, name, newName, keepAlias) {\n this.#ES6only();\n\n const member = this.#findMember(memberType, name);\n let end;\n\n if (keepAlias) {\n end = member.end;\n } else {\n end = member.absEnd;\n }\n \n this.unit.code.overwrite(member.start, end, newName);\n this.updateUnit();\n }\n\n\n /**\n * Changes the alias. Changing can be renaming\n * setting it initially or removing. \n * @param {string} memberType - member|defaultMember\n * @param {string} name - (default) member name\n * @param {string} [set] - A new name or nothing for removal\n */\n setAlias(memberType, name, set) {\n this.#ES6only();\n \n if (memberType === \"defaultMember\") {\n if (name !== \"*\") {\n throw new TypeError(\"The modification of a default member alias is only possible if the module is an asterisk. For other changes use the 'rename' method.\");\n } else if (!set) {\n throw new TypeError(\"Removing the alias of an asterisk is invalid. Use the 'rename' method for other changes.\");\n }\n }\n const aliasStr = set ? `${name} as ${set}` : name;\n this.renameMember(memberType, name, aliasStr, false);\n this.updateUnit();\n }\n\n\n /**\n * Method to call after a unit was completely removed\n * or replaced, to prevent matching it again afterwards.\n */\n makeUntraceable() {\n this.unit.id = `(deleted) ${this.unit.id}`;\n this.unit.hash = `(deleted) ${this.unit.hash}`;\n this.unit.module.name = `(deleted) ${this.unit.module.name}`;\n }\n\n\n /**\n * Debugging method to stop the building process\n * and list this unit properties.\n */\n log(error=true) {\n const unit = { ...this.unit };\n delete unit.methods;\n unit.code = [ unit.code.toString() ];\n if (error) {\n throw new DebuggingError(unit);\n }\n return unit;\n }\n}\n","/**\n * [ImportManager]{@link https://github.com/UmamiAppearance/ImportManager}\n *\n * The core class for the rollup-plugin-import-manager,\n * which can never the less be used standalone. \n * It handles code analysis, creates units from import\n * statements, attaches methods to the units and more.\n * \n * @version 0.3.3\n * @author UmamiAppearance [mail@umamiappearance.eu]\n * @license MIT\n * @see https://github.com/UmamiAppearance/rollup-plugin-import-manager\n */\n\nimport ImportManagerUnitMethods from \"./unit-methods.js\";\nimport { DebuggingError, MatchError } from \"./errors.js\";\nimport { parse } from \"acorn\";\nimport { full as fullWalk } from \"acorn-walk\"; \nimport MagicString from \"magic-string\";\nimport { bold, yellow } from \"colorette\";\nimport { EOL } from \"os\";\n\n\nclass ImportManager {\n\n /**\n * The constructor creates a class import\n * object and kicks of the code analysis.\n * @param {string} source - The unmodified source code.\n * @param {string} filename - The path/name of the input file (used for hash generation). \n * @param {object} [warnSpamProtection] - A Set which contains all previously printed warning hashes.\n * @param {boolean} [warnings=true] - Pass false to suppress warning messages.\n * @param {object} [pluginInstance] - Rollup plugin instance if used as a plugin.\n */\n constructor(source, filename, warnSpamProtection=new Set(), warnings=true, pluginInstance=null) {\n\n if (!source) {\n source=\"\";\n }\n\n if (!filename) {\n filename = String(simpleHash(source));\n }\n\n this.scopeMulti = 1000;\n\n this.imports = {\n es6: {\n count: 0,\n idScope: 1 * this.scopeMulti,\n searched: false,\n units: []\n },\n dynamic: {\n count: 0,\n idScope: 2 * this.scopeMulti,\n searched: false,\n units: []\n },\n cjs: {\n count: 0,\n idScope: 3 * this.scopeMulti,\n searched: false,\n units: []\n }\n\n };\n\n // id scope lookup table with the associated type\n this.idTypes = Object.fromEntries(Object.entries(this.imports).map(([k, v]) => [v.idScope, k]));\n\n this.code = new MagicString(source);\n\n this.hashList = {};\n this.filename = filename.split(process.cwd()).at(1);\n this.warnSpamProtection = warnSpamProtection;\n \n this.parsedCode = parse(source, {\n ecmaVersion: \"latest\",\n sourceType: \"module\"\n });\n\n if (!warnings) {\n this.warning = () => {\n return;\n };\n }\n \n else {\n if (pluginInstance) {\n this.warn = pluginInstance.warn;\n } else {\n this.warn = msg => {\n console.warn(\n bold(yellow(`ImportManager: ${msg}`))\n );\n };\n }\n }\n \n this.analyze();\n }\n\n\n /**\n * Analyzes the source and stores all import\n * statements as unit objects in the object\n * \"this.imports\"\n */\n analyze() {\n \n let cjsId = this.imports.cjs.idScope;\n let cjsIndex = 0;\n\n let dynamicId = this.imports.dynamic.idScope;\n let dynamicIndex = 0;\n\n let es6Id = this.imports.es6.idScope;\n let es6Index = 0;\n\n this.parsedCode.body.forEach(node => {\n\n if (node.type === \"ImportDeclaration\") {\n const unit = this.#es6NodeToUnit(node);\n unit.id = es6Id ++;\n unit.index = es6Index ++;\n unit.hash = this.#makeHash(unit);\n this.imports.es6.units.push(unit);\n this.imports.es6.count ++;\n }\n \n else if (node.type === \"VariableDeclaration\" ||\n node.type === \"ExpressionStatement\")\n {\n fullWalk(node, part => {\n\n if (part.type === \"ImportExpression\") {\n const unit = this.#dynamicNodeToUnit(node, part);\n unit.id = dynamicId ++;\n unit.index = dynamicIndex ++;\n unit.hash = this.#makeHash(unit);\n this.imports.dynamic.units.push(unit);\n this.imports.dynamic.count ++;\n }\n \n else if (part.type === \"Identifier\" && part.name === \"require\") {\n const unit = this.#cjsNodeToUnit(node);\n unit.id = cjsId ++;\n unit.index = cjsIndex ++;\n unit.hash = this.#makeHash(unit);\n this.imports.cjs.units.push(unit);\n this.imports.cjs.count ++;\n }\n\n });\n }\n });\n }\n\n /**\n * Helper method to generate a very simple hash\n * from the unit properties.\n * @param {Object} unit - Unit to generate a hash from. \n * @returns {string} - a hash as a string \n */\n #makeHash(unit) {\n\n const makeInput = (unit) => {\n \n const joinProps = list => {\n list.forEach(member => {\n inputStr += member.name;\n if (member.alias) {\n inputStr += member.alias.name;\n }\n });\n }; \n\n let inputStr = unit.module.name\n + unit.type\n + this.filename;\n \n if (unit.members) {\n joinProps(unit.members.entities);\n }\n\n if (unit.defaultMembers) {\n joinProps(unit.defaultMembers.entities);\n }\n\n return inputStr;\n };\n\n const input = makeInput(unit);\n let hash = String(simpleHash(input));\n\n // handle duplicates\n if (hash in this.hashList) {\n \n if (unit.module.name !== \"N/A\") {\n this.warning(`It seems like there are multiple imports of module '${unit.module.name}'. You should examine that.`);\n }\n \n for (let nr=2;; nr++) {\n const nHash = `${hash}#${nr}`;\n if (!(nHash in this.hashList)) {\n hash = nHash;\n break;\n }\n }\n }\n \n this.hashList[hash] = unit.id;\n\n return hash;\n }\n\n\n /**\n * Method to generate a unit object from an acorn\n * node, originated from an ES6 Import Statement. \n * @param {Object|string} node - acorn node or es6 import statement string. \n * @param {number} [oStart] - For updating units the original start index has to be passed. \n * @param {number} [oEnd] - For updating units the original end index has to be passed.\n * @returns {object} - Import Manager Unit Object.\n */\n #es6NodeToUnit(node, oStart, oEnd) {\n\n let code;\n if (typeof node === \"string\") {\n code = node;\n try {\n node = parse(node, {\n ecmaVersion: \"latest\",\n sourceType: \"module\"\n }).body.at(0);\n } catch(e) {\n if (e instanceof SyntaxError) {\n let msg = `${EOL}${EOL}Generated Code Snippet${EOL}----------------------${EOL}`;\n let { line, column } = e.loc;\n line --;\n code.toString().split(EOL).forEach((l, i) => {\n msg += `l${EOL}`;\n if (line === i) {\n msg += bold(\" \".repeat(column) + `^${EOL}`);\n }\n });\n\n\n throw new SyntaxError(msg);\n }\n throw new Error(e);\n }\n } else {\n code = this.code.slice(node.start, node.end);\n }\n \n const mem = {\n defaultMembers: {\n count: 0,\n entities: []\n },\n members: {\n count: 0,\n entities: []\n }\n };\n\n if (node.specifiers) {\n for (const spec of node.specifiers) {\n \n const memType = spec.type === \"ImportSpecifier\" ? \"members\" : \"defaultMembers\";\n const index = mem[memType].count;\n const hasAlias = spec.local.start !== spec.start;\n\n const start = spec.start - node.start;\n let end;\n if (!hasAlias) {\n end = spec.end - node.start;\n } else {\n end = (memType === \"members\") ? spec.imported.end-node.start : start+1;\n }\n const name = code.slice(start, end);\n \n\n const member = {\n index,\n name,\n start,\n end,\n absEnd: spec.end - node.start\n };\n\n if (hasAlias) {\n member.alias = {\n name: spec.local.name,\n start: spec.local.start - node.start,\n end: spec.local.end - node.start\n };\n }\n\n if (index > 0) {\n member.last = mem[memType].entities[index-1].absEnd;\n mem[memType].entities[index-1].next = member.start;\n }\n \n mem[memType].entities.push(member);\n mem[memType].count ++;\n\n }\n }\n\n if (mem.members.count > 0) {\n const nonDefaultMatch = code.match(/{[\\s\\S]*?}/);\n mem.members.start = nonDefaultMatch.index;\n mem.members.end = mem.members.start + nonDefaultMatch.at(0).length; \n }\n\n if (mem.defaultMembers.count > 0) {\n mem.defaultMembers.start = mem.defaultMembers.entities.at(0).start;\n mem.defaultMembers.end = (mem.members.count > 0)\n ? mem.members.start\n : mem.defaultMembers.entities.at(-1).absEnd; \n }\n\n // store the first separator of the non default\n // and default members for a consistent style\n // if one wants to add members\n mem.defaultMembers.separator = (mem.defaultMembers.count > 1) ? code.slice(mem.defaultMembers.entities[0].absEnd, mem.defaultMembers.entities[0].next) : \", \";\n mem.members.separator = (mem.members.count > 1) ? code.slice(mem.members.entities[0].absEnd, mem.members.entities[0].next) : \", \";\n\n\n const module = {\n name: node.source.value.split(\"/\").at(-1),\n start: node.source.start - node.start,\n end: node.source.end - node.start,\n type: \"string\",\n quotes: node.source.raw.at(0)\n };\n\n \n const unit = {\n code: new MagicString(code),\n defaultMembers: mem.defaultMembers,\n members: mem.members,\n module,\n start: oStart || node.start,\n end: oEnd || node.end,\n type: \"es6\"\n };\n\n return unit;\n }\n\n\n /**\n * Method to generate a unit object from an acorn\n * node, originated from a Dynamic Import Statement.\n * @param {object} node - Complete acorn node.\n * @param {object} importObject - Actual import part.\n * @returns {object} - Import Manager Unit Object.\n */\n #dynamicNodeToUnit(node, importObject) {\n\n const code = this.code.slice(node.start, node.end);\n\n const module = {\n name: importObject.source.value.split(\"/\").at(-1) || \"N/A\",\n start: importObject.source.start - node.start,\n end: importObject.source.end - node.start\n };\n\n if (importObject.source.type === \"Literal\") {\n module.type = \"string\";\n module.quotes = importObject.source.raw.at(0);\n } else {\n module.type = \"raw\";\n }\n\n const unit = {\n code: new MagicString(code),\n module,\n start: node.start,\n end: node.end,\n type: \"dynamic\",\n };\n\n return unit;\n }\n\n\n /**\n * Method to generate a unit object from an acorn\n * node, originated from a Common JS Import Statement.\n * @param {object} node - Complete acorn node.\n * @returns {object} - Import Manager Unit Object.\n */\n #cjsNodeToUnit(node) {\n\n const code = this.code.slice(node.start, node.end);\n\n const modulePart = node.declarations.at(0).init.arguments.at(0); // TODO: test if this is robust\n const module = {\n name: modulePart.value.split(\"/\").at(-1) || \"N/A\",\n start: modulePart.start - node.start,\n end: modulePart.end - node.start\n };\n\n if (modulePart.type === \"Literal\") {\n module.type = \"string\";\n module.quotes = modulePart.raw.at(0);\n } else {\n module.type = \"raw\";\n }\n\n const unit = {\n code: new MagicString(code),\n module,\n start: node.start,\n end: node.end,\n type: \"cjs\",\n };\n\n return unit;\n }\n\n // ___________________ //\n // select unit methods //\n\n /**\n * Helper method to list available units\n * in case of a MatchError.\n * @param {Object[]} units - Array of unit objects to list.\n * @returns {string} - Message for logging.\n */\n #listUnits(units) {\n const msgArray = [\"\"];\n \n units.forEach(unit => {\n msgArray.push(\n \"___\",\n `ID: ${unit.id}`,\n `HASH: ${unit.hash}`, \n `NAME: ${unit.module.name}`,\n `STATEMENT:${EOL}${unit.code.toString()}${EOL}`\n );\n });\n return msgArray.join(EOL) + EOL;\n }\n\n\n /**\n * Helper method to list all available units.\n * @returns {string} - Message string.\n */\n #listAllUnits() {\n let msg = \"\";\n for (const type in this.imports) {\n msg += this.#listUnits(this.imports[type].units);\n }\n return msg;\n }\n\n \n /**\n * Selects a unit by its module name.\n * @param {string} name - Module Name. \n * @param {string|string[]} [type] - \"cjs\", \"dynamic\", \"es6\" one as a string or multiple as array of strings\n * @param {boolean} allowNull - If false the module must be found or a MatchError is thrown.\n * @returns {Object} - An explicit unit.\n */\n selectModByName(name, type, allowNull) {\n if (!name) {\n throw new TypeError(\"The name must be provided\");\n }\n\n let unitList = [];\n\n // if the type is not specified use all types (cjs|dynamic|es6)\n if (!type) {\n type = Object.keys(this.imports);\n } else if (!Array.isArray(type)) {\n type = [type];\n }\n\n // if an empty array was passed, also use all types\n if (!type.length) {\n type = Object.keys(this.imports);\n }\n\n // test types for validity\n for (const t of type) {\n if (!(t in this.imports)) {\n throw new TypeError(`Invalid type: '${t}' - Should be one or more of: 'cjs', 'dynamic', 'es6'.`);\n }\n\n // push all available imports in one list\n if (this.imports[t].count > 0) {\n unitList.push(...this.imports[t].units);\n }\n }\n\n // filter for unit name\n const units = unitList.filter(unit => {\n const match = unit.module.name.indexOf(name) > -1;\n\n // ignore deleted units\n if (match && unit.module.name.match(/^\\(deleted\\)/)) {\n return false;\n }\n\n return match;\n });\n\n // throw errors if the match is not one\n // (if no filename was set a null match\n // is also valid)\n if (units.length === 0) {\n if (allowNull) {\n return null;\n }\n let msg = this.#listUnits(unitList);\n let typeStr;\n\n if (type.length === 1) {\n typeStr = type + \"-imports\";\n } else if (type.length < Object.keys(this.imports).length) { \n typeStr = type.join(\"-imports or \") + \"-imports\";\n } else {\n typeStr = \"any group\";\n }\n\n msg += `___${EOL}Unable to locate import statement with name: '${name}' in ${typeStr}`;\n throw new MatchError(msg);\n }\n \n else if (units.length > 1) {\n let msg = this.#listUnits(units);\n msg += `___${EOL}Found multiple matches for '${name}'. If no other solution is available you may select via hash.`;\n throw new MatchError(msg);\n }\n\n // finally add methods for manipulation to the unit\n const unit = units[0];\n unit.methods = new ImportManagerUnitMethods(unit, this.#es6NodeToUnit);\n\n return unit;\n }\n\n\n /**\n * Selects a unit by its id. Should only be used\n * for testing purposes.\n * @param {number} id - Unit id. \n * @param {boolean} allowNull - If false the module must be found or a MatchError is thrown.\n * @returns {Object} - An explicit unit.\n */\n selectModById(id, allowNull) {\n if (!id) {\n throw new TypeError(\"The id must be provided\");\n }\n \n // get the type by the id scope\n const type = this.idTypes[ Math.floor(id / this.scopeMulti) * this.scopeMulti ];\n\n // if it is not possible to extract a type by the scope,\n // the id is invalid \n if (!type) {\n // generate an ascending list of valid ids\n const ascIds = Object.keys(this.idTypes).sort();\n throw new TypeError(`Id '${id}' is invalid. Ids range from ${ascIds.at(0)} to ${ascIds.at(-1)}+`);\n }\n\n // filter the units of the given type for the id\n const units = this.imports[type].units.filter(n => n.id == id);\n\n // if null matches are allowed return null \n // if no match was found, otherwise raise\n // a match error\n if (units.length === 0) {\n if (allowNull) {\n return null;\n }\n let msg = this.#listUnits(this.imports[type].units);\n msg += `___${EOL}Unable to locate import statement with id: '${id}'`;\n throw new MatchError(msg);\n }\n\n // add unit methods\n const unit = units[0];\n unit.methods = new ImportManagerUnitMethods(unit, this.#es6NodeToUnit);\n\n return unit;\n }\n\n /**\n * Selects a unit by its hash. The hash will change\n * if the unit changes its properties in the source\n * code (like members, alias, etc.)\n * All hashes for one file are stored in a list, with\n * the corresponding id. The id-match method can there-\n * fore be used, to find the unit.\n * @param {string} hash - The hash string of the unit.\n * @param {boolean} allowNull - If false the module must be found or a MatchError is thrown.\n * @returns {object} - An explicit unit.\n */\n selectModByHash(hash, allowNull) {\n if (!(hash in this.hashList)) {\n if (allowNull) {\n return null;\n }\n let msg = this.#listAllUnits(); \n msg += `___${EOL}Unable to locate import statement with hash '${hash}'`;\n throw new MatchError(msg);\n }\n\n return this.selectModById(this.hashList[hash]);\n }\n\n // ___________________________________________ //\n // methods for unit creation, replacement, etc. //\n\n /**\n * All manipulation via unit method is made on the\n * code slice of the unit. This methods writes it\n * to the code instance. \n * @param {Object} unit - Unit Object. \n */\n commitChanges(unit) {\n this.code.overwrite(unit.start, unit.end, unit.code.toString());\n }\n\n\n /**\n * Removes a unit from the code instance.\n * The action must not be committed. \n * @param {Object} unit - Unit Object.\n * @returns {string} - Unit code, for further processing.\n */\n remove(unit) {\n let charAfter = this.code.slice(unit.end, unit.end+1);\n let end = unit.end;\n \n if (charAfter === \"\\r\") {\n end++;\n charAfter = this.code.slice(end, end+1);\n }\n if (charAfter === \"\\n\") {\n end++;\n }\n \n const code = this.code.slice(unit.start, end);\n\n this.code.remove(unit.start, end);\n unit.methods.makeUntraceable();\n this.imports[unit.type].count --;\n \n return code;\n }\n\n /**\n * Helper method to declare a variable.\n * @param {string} declarator - const|let|var|global \n * @param {string} varname - Variable Name. \n * @returns {string} - Declarator + Varname + Equal Sign.\n */\n #genDeclaration(declarator, varname) {\n let declaration;\n if (declarator === \"global\") {\n declaration = varname;\n } else {\n declaration = `${declarator} ${varname}`;\n }\n return declaration;\n }\n\n /**\n * Generates a CJS Import Statement.\n * @param {string} module - Module (path).\n * @returns {string} - CJS Import Statement.\n */\n makeCJSStatement(module, declarator, varname) {\n const declaration = this.#genDeclaration(declarator, varname);\n return `${declaration} = require(\"${module}\");${EOL}`;\n }\n\n /**\n * Generates a Dynamic Import Statement.\n * @param {string} module - Module (path).\n * @returns {string} - CJS Import Statement.\n */\n makeDynamicStatement(module, declarator, varname) {\n const declaration = this.#genDeclaration(declarator, varname);\n return `${declaration} = await import(\"${module}\");${EOL}`;\n }\n \n\n /**\n * Generates an ES6 Import Statement.\n * @param {string} module - Module (path).\n * @param {string[]} defaultMembers - Default Member Part.\n * @param {string[]} members - Member Part.\n * @returns {string} - ES6 Import Statement.\n */\n makeES6Statement(module, defaultMembers, members) {\n const memberStrArray = [];\n \n if (defaultMembers.length) {\n memberStrArray.push(\n defaultMembers.join(\", \")\n );\n }\n\n if (members.length) {\n memberStrArray.push(\n \"{ \" + members.join(\", \") + \" }\"\n );\n }\n\n let memberPart = memberStrArray.join(\", \");\n if (memberPart) {\n memberPart += \" from \";\n }\n\n return `import ${memberPart}'${module}';${EOL}`;\n }\n\n\n /**\n * Inserts an Import Statement to the top\n * of the file or after the last found import\n * statement.\n * @param {string} statement - Import Statement.\n * @param {number} pos - 'top' or 'bottom'\n */\n insertStatement(statement, pos, type) {\n\n let index = 0;\n\n if (pos !== \"top\" && this.imports[type].count > 0) {\n index = this.imports[type].units.at(-1).end;\n\n // move the index if the following char is a newline\n // (if the line was removed in an earlier operation\n // this will throw an error, don't do any change in\n // this case\n\n let nextChar;\n try {\n nextChar = this.code.slice(index, index+1);\n } catch {\n nextChar = null;\n }\n\n if (nextChar === \"\\r\") {\n index ++;\n }\n if (nextChar === \"\\n\") {\n index ++;\n }\n }\n \n else {\n // find the first meaningful (not a comment)\n // code and use the start as insertion point\n \n index = this.parsedCode.body.at(0).start;\n }\n \n this.code.appendRight(index, statement);\n }\n\n\n /**\n * Inserts an Import Statement before or after\n * a given unit. Also an existing statement can be\n * replaced.\n * @param {Object} unit - Unit Object \n * @param {string} mode - 'append'|'prepend'|'replace' \n * @param {string} statement - Import Statement. \n */\n insertAtUnit(unit, mode, statement) {\n\n let index;\n if (mode === \"append\") {\n index = unit.end;\n if (this.code.slice(index, index+1) === \"\\r\") {\n index ++;\n }\n if (this.code.slice(index, index+1) === \"\\n\") {\n index ++;\n }\n this.code.appendRight(index, statement);\n }\n \n else if (mode === \"prepend\") {\n index = unit.start;\n this.code.prependLeft(index, statement);\n }\n\n else if (mode === \"replace\") {\n // remove new line from statement\n statement = statement.slice(0, -1);\n \n this.code.overwrite(unit.start, unit.end, statement);\n unit.methods.makeUntraceable();\n this.imports[unit.type].count --;\n }\n }\n\n\n // ________________________ //\n // global debugging methods //\n\n \n /**\n * Debug statements created by IM.\n * @param {string} code - Code Snippet String.\n * @param {Object} [target] - Target Unit Object.\n * @param {string} [type] - Target type.\n * @param {string} [mode] - Insert position or attach mode.\n */\n logCreations(code, target, type, mode) {\n let msg = {\n addCode: code\n };\n if (target) {\n msg.mode = mode;\n msg.targetType = target.type;\n msg.targetUnit = target.methods.log(false);\n } else if (type) {\n msg.insert = mode;\n msg.targetType = type;\n }\n throw new DebuggingError(msg);\n }\n\n\n /**\n * Debugging method to stop the building process\n * and list all import units with its id, hash and\n * import statement.\n */\n logUnits() {\n throw new DebuggingError(this.#listAllUnits());\n }\n\n\n /**\n * Debugging method to stop the building process\n * and list the complete import object.\n */\n logUnitObjects() {\n const imports = {...this.imports};\n for (const key in imports) {\n imports[key].units.forEach(unit => {\n unit.code = [ unit.code.toString() ];\n });\n }\n throw new DebuggingError(imports);\n }\n\n\n /**\n * Warnings with spam protection. Can use internal\n * and native rollup method.\n * @param {string} msg - Warning Message. \n */\n warning(msg) {\n const hash = simpleHash(msg);\n\n if (this.warnSpamProtection.has(hash)) {\n return;\n }\n\n this.warnSpamProtection.add(hash);\n this.warn(msg);\n }\n}\n\n\n/**\n * A (simple as it gets) hash from string function.\n * @see https://gist.github.com/iperelivskiy/4110988?permalink_comment_id=2697447#gistcomment-2697447\n * @see https://gist.github.com/badboy/6267743#knuths-multiplicative-method\n * @param {string} input \n * @returns {number} - Hash number.\n */\nconst simpleHash = (input) => {\n let h = 0xdeadbeef;\n for (let i=0; i>> 16) >>> 0;\n};\n\nexport { ImportManager, DebuggingError, MatchError, simpleHash };\n"],"names":["parse","bold","yellow","fullWalk","EOL"],"mappings":"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"} -\ No newline at end of file -+{"version":3,"file":"import-manager.cjs","sources":["../src/errors.js","../src/unit-methods.js","../src/core.js"],"sourcesContent":["/**\n * Custom error to tell the user, that it is\n * not possible to select a specific unit.\n */\nclass MatchError extends Error {\n constructor(message) {\n super(message);\n this.name = \"MatchError\";\n }\n}\n\n/**\n * Custom error to abort the building process\n * for retrieving information.\n */\nclass DebuggingError extends Error {\n constructor(message) {\n if (typeof message !== \"string\") {\n message = JSON.stringify(message, null, 4);\n }\n super(message);\n this.name = \"DebuggingError\";\n }\n}\n\nexport { DebuggingError, MatchError };\n","import { DebuggingError, MatchError } from \"./errors.js\";\n\n/**\n * Creates methods for unit manipulation to\n * be attached to a requested unit.\n */\nexport default class ImportManagerUnitMethods {\n\n /**\n * Stores the handed over unit and creates\n * an update method.\n * @param {Object} unit - The unit a user requests \n * @param {*} es6NodeToUnit - Method to analyze a \n */\n constructor(unit, es6NodeToUnit) {\n this.unit = unit;\n\n // After a change in the code of a es6 unit is made\n // it gets analyzed again, which is very verbose,\n // but prevents errors. The \"MagicString\" does not\n // contain multiple changes at a time. The analysis\n // function is the same as for the initial file\n // analyses and gets handed over by the main class.\n\n this.updateUnit = () => {\n\n const unit = es6NodeToUnit(\n this.unit.code.toString(),\n this.unit.start,\n this.unit.end\n );\n\n Object.assign(this.unit, unit);\n\n };\n }\n\n\n /**\n * Makes sure, that the processed unit is of type 'es6'. \n */\n #ES6only() {\n if (this.unit.type !== \"es6\") {\n throw new Error(\"This method is only available for ES6 imports.\");\n }\n }\n\n\n /**\n * Changes the module part of a import statement.\n * @param {string | (moduleSourceRaw: string) => string} name - The new module part/path or a function\n * that receives the module's raw source code (including quotes if present) and returns the new module part/path.\n * @param {*} modType - Module type (literal|raw).\n * EDIT: Added support for name (aka rename in rollup plugin action) to be a function\n */\n renameModule(name, modType) {\n const isNameAFn = typeof name === 'function';\n\n if (!isNameAFn) {\n if (modType === \"string\") {\n if (!this.unit.module.quotes) {\n this.unit.module.quotes = \"\\\"\";\n }\n const q = this.unit.module.quotes;\n name = q + name + q;\n } else if (modType !== \"raw\") {\n throw new TypeError(`Unknown modType '${modType}'. Valid types are 'string' and 'raw'.`);\n }\n }\n \n this.unit.code.overwrite(this.unit.module.start, this.unit.module.end, isNameAFn ? name(this.unit.module.sourceRaw) : name);\n\n if (this.unit.type === \"es6\") {\n this.updateUnit();\n }\n }\n\n\n /**\n * Adds default members to the import statement.\n * @param {string[]} names - A list of default members to add.\n */\n addDefaultMembers(names) {\n this.#ES6only();\n\n let start; \n let defStr;\n let memberPart = null;\n\n // handle the case if default members already exist\n if (this.unit.defaultMembers.count > 0) {\n start = this.unit.defaultMembers.entities.at(-1).absEnd;\n defStr = this.unit.defaultMembers.separator \n + names.join(this.unit.defaultMembers.separator);\n this.unit.code.appendRight(start, defStr);\n }\n\n // handle the case if default members do not exist, \n // and also no non default members (the addition\n // needs to be appended left, otherwise is\n // interferes with the module part)\n else if (this.unit.members.count === 0) {\n start = this.unit.module.start;\n defStr = names.join(this.unit.members.separator);\n memberPart = defStr;\n defStr += \" from \";\n this.unit.code.appendLeft(start, defStr);\n }\n\n // handle the case if default members do not exist, \n // but non default members\n else {\n start = this.unit.members.start;\n defStr = names.join(this.unit.defaultMembers.separator)\n + this.unit.members.separator;\n this.unit.code.appendRight(start, defStr);\n }\n \n this.updateUnit(memberPart);\n }\n\n\n /**\n * Adds non default members to the import statement.\n * @param {string[]} names - A list of members to add. \n */\n addMembers(names) {\n this.#ES6only();\n\n let start; \n let memStr;\n let memberPart = null;\n \n // handle the case if members already exist\n if (this.unit.members.count > 0) {\n start = this.unit.members.entities.at(-1).absEnd;\n memStr = this.unit.members.separator \n + names.join(this.unit.members.separator);\n this.unit.code.appendRight(start, memStr);\n }\n\n // handle the case if members do not exist, \n // and also no default members (the addition\n // needs to be appended left, otherwise is\n // interferes with the module part)\n else if (this.unit.defaultMembers.count === 0) {\n start = this.unit.module.start;\n memStr = \"{ \"\n + names.join(this.unit.members.separator)\n + \" }\";\n memberPart = memStr;\n memStr += \" from \";\n this.unit.code.appendLeft(start, memStr);\n }\n\n // handle the case if members do not exist, \n // but default members\n else {\n start = this.unit.defaultMembers.end;\n memStr = this.unit.defaultMembers.separator\n + \"{ \"\n + names.join(this.unit.members.separator)\n + \" }\";\n this.unit.code.appendRight(start, memStr);\n }\n\n this.updateUnit(memberPart);\n }\n\n\n /**\n * Internal helper method to get the member type.\n * The user input distinguishes between member/defaultMember\n * and the plural versions of them. To prevent confusion in the\n * process of selecting the different styles in the unit, this\n * methods adds an \"s\" to the given string if missing and selects\n * the requested type.\n * @param {*} memberType \n * @returns \n */\n #getType(memberType) {\n if (memberType.at(-1) !== \"s\") {\n memberType += \"s\";\n }\n return this.unit[memberType];\n }\n\n\n /**\n * Internal helper method to find a specific member\n * or default member.\n * @param {string} memberType - member/defaultMember. \n * @param {string} name - (default) member name. \n * @returns {Object} - (default) member object.\n */\n #findMember(memberType, name) {\n if (!name) {\n throw new Error(`${memberType} name must be set.`);\n }\n const filtered = this.#getType(memberType).entities.filter(m => m.name === name);\n if (filtered.length !== 1) {\n throw new MatchError(`Unable to locate ${memberType} with name '${name}'`);\n }\n return filtered[0];\n }\n\n\n /**\n * Removes a (default) member.\n * @param {string} memberType - member|defaultMember\n * @param {string} name - Name of the (default) member \n */\n removeMember(memberType, name) {\n this.#ES6only();\n\n const member = this.#findMember(memberType, name);\n\n if (this.#getType(memberType).count === 1) {\n this.removeMembers(memberType);\n } \n\n else {\n let start;\n let end;\n \n if (member.next) {\n start = member.start;\n end = member.next;\n } else if (member.last) {\n start = member.last;\n end = member.absEnd;\n } else {\n start = member.start;\n end = member.absEnd;\n }\n\n this.unit.code.remove(start, end); \n this.updateUnit();\n\n }\n }\n\n\n /**\n * Removes an entire group of members or default members.\n * @param {string} membersType - member(s)|defaultMember(s) \n */\n removeMembers(membersType) {\n this.#ES6only();\n\n const isDefault = membersType.indexOf(\"default\") > -1;\n\n const members = this.#getType(membersType);\n const others = this.#getType(isDefault ? \"members\" : \"defaultMembers\");\n\n let memberPart = null;\n if (others.count > 0) {\n \n const start = !isDefault \n ? this.unit.defaultMembers.entities.at(-1).end\n : members.start;\n\n this.unit.code.remove(start, members.end);\n }\n\n else {\n this.unit.code.remove(members.start, this.unit.module.start);\n memberPart = \"\";\n }\n\n this.updateUnit(memberPart);\n }\n\n\n /**\n * Renames a single (default) member. The alias\n * can be kept or overwritten. \n * @param {string} memberType - member|defaultMember \n * @param {string} name - The (default) member to rename.\n * @param {string} newName - The new name of the (default) member.\n * @param {boolean} keepAlias - True if the alias shall be untouched. \n */\n renameMember(memberType, name, newName, keepAlias) {\n this.#ES6only();\n\n const member = this.#findMember(memberType, name);\n let end;\n\n if (keepAlias) {\n end = member.end;\n } else {\n end = member.absEnd;\n }\n \n this.unit.code.overwrite(member.start, end, newName);\n this.updateUnit();\n }\n\n\n /**\n * Changes the alias. Changing can be renaming\n * setting it initially or removing. \n * @param {string} memberType - member|defaultMember\n * @param {string} name - (default) member name\n * @param {string} [set] - A new name or nothing for removal\n */\n setAlias(memberType, name, set) {\n this.#ES6only();\n \n if (memberType === \"defaultMember\") {\n if (name !== \"*\") {\n throw new TypeError(\"The modification of a default member alias is only possible if the module is an asterisk. For other changes use the 'rename' method.\");\n } else if (!set) {\n throw new TypeError(\"Removing the alias of an asterisk is invalid. Use the 'rename' method for other changes.\");\n }\n }\n const aliasStr = set ? `${name} as ${set}` : name;\n this.renameMember(memberType, name, aliasStr, false);\n this.updateUnit();\n }\n\n\n /**\n * Method to call after a unit was completely removed\n * or replaced, to prevent matching it again afterwards.\n */\n makeUntraceable() {\n this.unit.id = `(deleted) ${this.unit.id}`;\n this.unit.hash = `(deleted) ${this.unit.hash}`;\n this.unit.module.name = `(deleted) ${this.unit.module.name}`;\n }\n\n\n /**\n * Debugging method to stop the building process\n * and list this unit properties.\n */\n log(error=true) {\n const unit = { ...this.unit };\n delete unit.methods;\n unit.code = [ unit.code.toString() ];\n if (error) {\n throw new DebuggingError(unit);\n }\n return unit;\n }\n}\n","/**\n * [ImportManager]{@link https://github.com/UmamiAppearance/ImportManager}\n *\n * The core class for the rollup-plugin-import-manager,\n * which can never the less be used standalone. \n * It handles code analysis, creates units from import\n * statements, attaches methods to the units and more.\n * \n * @version 0.3.3\n * @author UmamiAppearance [mail@umamiappearance.eu]\n * @license MIT\n * @see https://github.com/UmamiAppearance/rollup-plugin-import-manager\n */\n\nimport ImportManagerUnitMethods from \"./unit-methods.js\";\nimport { DebuggingError, MatchError } from \"./errors.js\";\nimport { parse } from \"acorn\";\nimport { full as fullWalk } from \"acorn-walk\"; \nimport MagicString from \"magic-string\";\nimport { bold, yellow } from \"colorette\";\nimport { EOL } from \"os\";\n\n\nclass ImportManager {\n\n /**\n * The constructor creates a class import\n * object and kicks of the code analysis.\n * @param {string} source - The unmodified source code.\n * @param {string} filename - The path/name of the input file (used for hash generation). \n * @param {object} [warnSpamProtection] - A Set which contains all previously printed warning hashes.\n * @param {boolean} [warnings=true] - Pass false to suppress warning messages.\n * @param {object} [pluginInstance] - Rollup plugin instance if used as a plugin.\n */\n constructor(source, filename, warnSpamProtection=new Set(), warnings=true, pluginInstance=null) {\n\n if (!source) {\n source=\"\";\n }\n\n if (!filename) {\n filename = String(simpleHash(source));\n }\n\n this.scopeMulti = 1000;\n\n this.imports = {\n es6: {\n count: 0,\n idScope: 1 * this.scopeMulti,\n searched: false,\n units: []\n },\n dynamic: {\n count: 0,\n idScope: 2 * this.scopeMulti,\n searched: false,\n units: []\n },\n cjs: {\n count: 0,\n idScope: 3 * this.scopeMulti,\n searched: false,\n units: []\n }\n\n };\n\n // id scope lookup table with the associated type\n this.idTypes = Object.fromEntries(Object.entries(this.imports).map(([k, v]) => [v.idScope, k]));\n\n this.code = new MagicString(source);\n\n this.hashList = {};\n this.filename = filename.split(process.cwd()).at(1);\n this.warnSpamProtection = warnSpamProtection;\n \n this.parsedCode = parse(source, {\n ecmaVersion: \"latest\",\n sourceType: \"module\"\n });\n\n if (!warnings) {\n this.warning = () => {\n return;\n };\n }\n \n else {\n if (pluginInstance) {\n this.warn = pluginInstance.warn;\n } else {\n this.warn = msg => {\n console.warn(\n bold(yellow(`ImportManager: ${msg}`))\n );\n };\n }\n }\n \n this.analyze();\n }\n\n\n /**\n * Analyzes the source and stores all import\n * statements as unit objects in the object\n * \"this.imports\"\n */\n analyze() {\n \n let cjsId = this.imports.cjs.idScope;\n let cjsIndex = 0;\n\n let dynamicId = this.imports.dynamic.idScope;\n let dynamicIndex = 0;\n\n let es6Id = this.imports.es6.idScope;\n let es6Index = 0;\n\n this.parsedCode.body.forEach(node => {\n\n if (node.type === \"ImportDeclaration\") {\n const unit = this.#es6NodeToUnit(node);\n unit.id = es6Id ++;\n unit.index = es6Index ++;\n unit.hash = this.#makeHash(unit);\n this.imports.es6.units.push(unit);\n this.imports.es6.count ++;\n }\n \n else if (node.type === \"VariableDeclaration\" ||\n node.type === \"ExpressionStatement\")\n {\n fullWalk(node, part => {\n\n if (part.type === \"ImportExpression\") {\n const unit = this.#dynamicNodeToUnit(node, part);\n unit.id = dynamicId ++;\n unit.index = dynamicIndex ++;\n unit.hash = this.#makeHash(unit);\n this.imports.dynamic.units.push(unit);\n this.imports.dynamic.count ++;\n }\n \n else if (part.type === \"Identifier\" && part.name === \"require\") {\n const unit = this.#cjsNodeToUnit(node);\n unit.id = cjsId ++;\n unit.index = cjsIndex ++;\n unit.hash = this.#makeHash(unit);\n this.imports.cjs.units.push(unit);\n this.imports.cjs.count ++;\n }\n\n });\n }\n });\n }\n\n /**\n * Helper method to generate a very simple hash\n * from the unit properties.\n * @param {Object} unit - Unit to generate a hash from. \n * @returns {string} - a hash as a string \n */\n #makeHash(unit) {\n\n const makeInput = (unit) => {\n \n const joinProps = list => {\n list.forEach(member => {\n inputStr += member.name;\n if (member.alias) {\n inputStr += member.alias.name;\n }\n });\n }; \n\n let inputStr = unit.module.name\n + unit.type\n + this.filename;\n \n if (unit.members) {\n joinProps(unit.members.entities);\n }\n\n if (unit.defaultMembers) {\n joinProps(unit.defaultMembers.entities);\n }\n\n return inputStr;\n };\n\n const input = makeInput(unit);\n let hash = String(simpleHash(input));\n\n // handle duplicates\n if (hash in this.hashList) {\n \n if (unit.module.name !== \"N/A\") {\n this.warning(`It seems like there are multiple imports of module '${unit.module.name}'. You should examine that.`);\n }\n \n for (let nr=2;; nr++) {\n const nHash = `${hash}#${nr}`;\n if (!(nHash in this.hashList)) {\n hash = nHash;\n break;\n }\n }\n }\n \n this.hashList[hash] = unit.id;\n\n return hash;\n }\n\n\n /**\n * Method to generate a unit object from an acorn\n * node, originated from an ES6 Import Statement. \n * @param {Object|string} node - acorn node or es6 import statement string. \n * @param {number} [oStart] - For updating units the original start index has to be passed. \n * @param {number} [oEnd] - For updating units the original end index has to be passed.\n * @returns {object} - Import Manager Unit Object.\n */\n #es6NodeToUnit(node, oStart, oEnd) {\n\n let code;\n if (typeof node === \"string\") {\n code = node;\n try {\n node = parse(node, {\n ecmaVersion: \"latest\",\n sourceType: \"module\"\n }).body.at(0);\n } catch(e) {\n if (e instanceof SyntaxError) {\n let msg = `${EOL}${EOL}Generated Code Snippet${EOL}----------------------${EOL}`;\n let { line, column } = e.loc;\n line --;\n code.toString().split(EOL).forEach((l, i) => {\n msg += `l${EOL}`;\n if (line === i) {\n msg += bold(\" \".repeat(column) + `^${EOL}`);\n }\n });\n\n\n throw new SyntaxError(msg);\n }\n throw new Error(e);\n }\n } else {\n code = this.code.slice(node.start, node.end);\n }\n \n const mem = {\n defaultMembers: {\n count: 0,\n entities: []\n },\n members: {\n count: 0,\n entities: []\n }\n };\n\n if (node.specifiers) {\n for (const spec of node.specifiers) {\n \n const memType = spec.type === \"ImportSpecifier\" ? \"members\" : \"defaultMembers\";\n const index = mem[memType].count;\n const hasAlias = spec.local.start !== spec.start;\n\n const start = spec.start - node.start;\n let end;\n if (!hasAlias) {\n end = spec.end - node.start;\n } else {\n end = (memType === \"members\") ? spec.imported.end-node.start : start+1;\n }\n const name = code.slice(start, end);\n \n\n const member = {\n index,\n name,\n start,\n end,\n absEnd: spec.end - node.start\n };\n\n if (hasAlias) {\n member.alias = {\n name: spec.local.name,\n start: spec.local.start - node.start,\n end: spec.local.end - node.start\n };\n }\n\n if (index > 0) {\n member.last = mem[memType].entities[index-1].absEnd;\n mem[memType].entities[index-1].next = member.start;\n }\n \n mem[memType].entities.push(member);\n mem[memType].count ++;\n\n }\n }\n\n if (mem.members.count > 0) {\n const nonDefaultMatch = code.match(/{[\\s\\S]*?}/);\n mem.members.start = nonDefaultMatch.index;\n mem.members.end = mem.members.start + nonDefaultMatch.at(0).length; \n }\n\n if (mem.defaultMembers.count > 0) {\n mem.defaultMembers.start = mem.defaultMembers.entities.at(0).start;\n mem.defaultMembers.end = (mem.members.count > 0)\n ? mem.members.start\n : mem.defaultMembers.entities.at(-1).absEnd; \n }\n\n // store the first separator of the non default\n // and default members for a consistent style\n // if one wants to add members\n mem.defaultMembers.separator = (mem.defaultMembers.count > 1) ? code.slice(mem.defaultMembers.entities[0].absEnd, mem.defaultMembers.entities[0].next) : \", \";\n mem.members.separator = (mem.members.count > 1) ? code.slice(mem.members.entities[0].absEnd, mem.members.entities[0].next) : \", \";\n\n\n const module = {\n name: node.source.value.split(\"/\").at(-1),\n start: node.source.start - node.start,\n end: node.source.end - node.start,\n type: \"string\",\n quotes: node.source.raw.at(0),\n // EDIT: added module's raw source code\n sourceRaw: node.source.raw\n };\n\n \n const unit = {\n code: new MagicString(code),\n defaultMembers: mem.defaultMembers,\n members: mem.members,\n module,\n start: oStart || node.start,\n end: oEnd || node.end,\n type: \"es6\"\n };\n\n return unit;\n }\n\n\n /**\n * Method to generate a unit object from an acorn\n * node, originated from a Dynamic Import Statement.\n * @param {object} node - Complete acorn node.\n * @param {object} importObject - Actual import part.\n * @returns {object} - Import Manager Unit Object.\n */\n #dynamicNodeToUnit(node, importObject) {\n\n const code = this.code.slice(node.start, node.end);\n\n const module = {\n name: importObject.source.value.split(\"/\").at(-1) || \"N/A\",\n start: importObject.source.start - node.start,\n end: importObject.source.end - node.start,\n // EDIT: added module's raw source code\n sourceRaw: importObject.source.raw\n };\n\n if (importObject.source.type === \"Literal\") {\n module.type = \"string\";\n module.quotes = importObject.source.raw.at(0);\n } else {\n module.type = \"raw\";\n }\n\n const unit = {\n code: new MagicString(code),\n module,\n start: node.start,\n end: node.end,\n type: \"dynamic\",\n };\n\n return unit;\n }\n\n\n /**\n * Method to generate a unit object from an acorn\n * node, originated from a Common JS Import Statement.\n * @param {object} node - Complete acorn node.\n * @returns {object} - Import Manager Unit Object.\n */\n #cjsNodeToUnit(node) {\n\n const code = this.code.slice(node.start, node.end);\n\n const modulePart = node.declarations.at(0).init.arguments.at(0); // TODO: test if this is robust\n const module = {\n name: modulePart.value.split(\"/\").at(-1) || \"N/A\",\n start: modulePart.start - node.start,\n end: modulePart.end - node.start,\n // EDIT: added module's raw source code\n sourceRaw: modulePart.raw\n };\n\n if (modulePart.type === \"Literal\") {\n module.type = \"string\";\n module.quotes = modulePart.raw.at(0);\n } else {\n module.type = \"raw\";\n }\n\n const unit = {\n code: new MagicString(code),\n module,\n start: node.start,\n end: node.end,\n type: \"cjs\",\n };\n\n return unit;\n }\n\n // ___________________ //\n // select unit methods //\n\n /**\n * Helper method to list available units\n * in case of a MatchError.\n * @param {Object[]} units - Array of unit objects to list.\n * @returns {string} - Message for logging.\n */\n #listUnits(units) {\n const msgArray = [\"\"];\n \n units.forEach(unit => {\n msgArray.push(\n \"___\",\n `ID: ${unit.id}`,\n `HASH: ${unit.hash}`, \n `NAME: ${unit.module.name}`,\n `STATEMENT:${EOL}${unit.code.toString()}${EOL}`\n );\n });\n return msgArray.join(EOL) + EOL;\n }\n\n\n /**\n * Helper method to list all available units.\n * @returns {string} - Message string.\n */\n #listAllUnits() {\n let msg = \"\";\n for (const type in this.imports) {\n msg += this.#listUnits(this.imports[type].units);\n }\n return msg;\n }\n\n \n /**\n * Selects a unit by its module name.\n * @param {string|RegExp} name - Module Name. \n * @param {string|string[]} [type] - \"cjs\", \"dynamic\", \"es6\" one as a string or multiple as array of strings\n * @param {boolean} allowNull - If false the module must be found or a MatchError is thrown.\n * @returns {Object} - An explicit unit.\n */\n selectModByName(name, type, allowNull) {\n if (!name) {\n throw new TypeError(\"The name must be provided\");\n }\n\n let unitList = [];\n\n // if the type is not specified use all types (cjs|dynamic|es6)\n if (!type) {\n type = Object.keys(this.imports);\n } else if (!Array.isArray(type)) {\n type = [type];\n }\n\n // if an empty array was passed, also use all types\n if (!type.length) {\n type = Object.keys(this.imports);\n }\n\n // test types for validity\n for (const t of type) {\n if (!(t in this.imports)) {\n throw new TypeError(`Invalid type: '${t}' - Should be one or more of: 'cjs', 'dynamic', 'es6'.`);\n }\n\n // push all available imports in one list\n if (this.imports[t].count > 0) {\n unitList.push(...this.imports[t].units);\n }\n }\n\n // filter for unit name\n const units = unitList.filter(unit => {\n // EDIT: unit.module can now be a string or a regex\n const match = name instanceof RegExp ? unit.module.name !== undefined && name.test(unit.module.name) : unit.module.name.indexOf(name) > -1;\n\n // ignore deleted units\n if (match && unit.module.name.match(/^\\(deleted\\)/)) {\n return false;\n }\n\n return match;\n });\n\n // throw errors if the match is not one\n // (if no filename was set a null match\n // is also valid)\n if (units.length === 0) {\n if (allowNull) {\n return null;\n }\n let msg = this.#listUnits(unitList);\n let typeStr;\n\n if (type.length === 1) {\n typeStr = type + \"-imports\";\n } else if (type.length < Object.keys(this.imports).length) { \n typeStr = type.join(\"-imports or \") + \"-imports\";\n } else {\n typeStr = \"any group\";\n }\n\n msg += `___${EOL}Unable to locate import statement with name: '${name}' in ${typeStr}`;\n throw new MatchError(msg);\n }\n \n else if (units.length > 1) {\n let msg = this.#listUnits(units);\n msg += `___${EOL}Found multiple matches for '${name}'. If no other solution is available you may select via hash.`;\n throw new MatchError(msg);\n }\n\n // finally add methods for manipulation to the unit\n const unit = units[0];\n unit.methods = new ImportManagerUnitMethods(unit, this.#es6NodeToUnit);\n\n return unit;\n }\n\n\n /**\n * Selects a unit by its id. Should only be used\n * for testing purposes.\n * @param {number} id - Unit id. \n * @param {boolean} allowNull - If false the module must be found or a MatchError is thrown.\n * @returns {Object} - An explicit unit.\n */\n selectModById(id, allowNull) {\n if (!id) {\n throw new TypeError(\"The id must be provided\");\n }\n \n // get the type by the id scope\n const type = this.idTypes[ Math.floor(id / this.scopeMulti) * this.scopeMulti ];\n\n // if it is not possible to extract a type by the scope,\n // the id is invalid \n if (!type) {\n // generate an ascending list of valid ids\n const ascIds = Object.keys(this.idTypes).sort();\n throw new TypeError(`Id '${id}' is invalid. Ids range from ${ascIds.at(0)} to ${ascIds.at(-1)}+`);\n }\n\n // filter the units of the given type for the id\n const units = this.imports[type].units.filter(n => n.id == id);\n\n // if null matches are allowed return null \n // if no match was found, otherwise raise\n // a match error\n if (units.length === 0) {\n if (allowNull) {\n return null;\n }\n let msg = this.#listUnits(this.imports[type].units);\n msg += `___${EOL}Unable to locate import statement with id: '${id}'`;\n throw new MatchError(msg);\n }\n\n // add unit methods\n const unit = units[0];\n unit.methods = new ImportManagerUnitMethods(unit, this.#es6NodeToUnit);\n\n return unit;\n }\n\n /**\n * Selects a unit by its hash. The hash will change\n * if the unit changes its properties in the source\n * code (like members, alias, etc.)\n * All hashes for one file are stored in a list, with\n * the corresponding id. The id-match method can there-\n * fore be used, to find the unit.\n * @param {string} hash - The hash string of the unit.\n * @param {boolean} allowNull - If false the module must be found or a MatchError is thrown.\n * @returns {object} - An explicit unit.\n */\n selectModByHash(hash, allowNull) {\n if (!(hash in this.hashList)) {\n if (allowNull) {\n return null;\n }\n let msg = this.#listAllUnits(); \n msg += `___${EOL}Unable to locate import statement with hash '${hash}'`;\n throw new MatchError(msg);\n }\n\n return this.selectModById(this.hashList[hash]);\n }\n\n // ___________________________________________ //\n // methods for unit creation, replacement, etc. //\n\n /**\n * All manipulation via unit method is made on the\n * code slice of the unit. This methods writes it\n * to the code instance. \n * @param {Object} unit - Unit Object. \n */\n commitChanges(unit) {\n this.code.overwrite(unit.start, unit.end, unit.code.toString());\n }\n\n\n /**\n * Removes a unit from the code instance.\n * The action must not be committed. \n * @param {Object} unit - Unit Object.\n * @returns {string} - Unit code, for further processing.\n */\n remove(unit) {\n let charAfter = this.code.slice(unit.end, unit.end+1);\n let end = unit.end;\n \n if (charAfter === \"\\r\") {\n end++;\n charAfter = this.code.slice(end, end+1);\n }\n if (charAfter === \"\\n\") {\n end++;\n }\n \n const code = this.code.slice(unit.start, end);\n\n this.code.remove(unit.start, end);\n unit.methods.makeUntraceable();\n this.imports[unit.type].count --;\n \n return code;\n }\n\n /**\n * Helper method to declare a variable.\n * @param {string} declarator - const|let|var|global \n * @param {string} varname - Variable Name. \n * @returns {string} - Declarator + Varname + Equal Sign.\n */\n #genDeclaration(declarator, varname) {\n let declaration;\n if (declarator === \"global\") {\n declaration = varname;\n } else {\n declaration = `${declarator} ${varname}`;\n }\n return declaration;\n }\n\n /**\n * Generates a CJS Import Statement.\n * @param {string} module - Module (path).\n * @returns {string} - CJS Import Statement.\n */\n makeCJSStatement(module, declarator, varname) {\n const declaration = this.#genDeclaration(declarator, varname);\n return `${declaration} = require(\"${module}\");${EOL}`;\n }\n\n /**\n * Generates a Dynamic Import Statement.\n * @param {string} module - Module (path).\n * @returns {string} - CJS Import Statement.\n */\n makeDynamicStatement(module, declarator, varname) {\n const declaration = this.#genDeclaration(declarator, varname);\n return `${declaration} = await import(\"${module}\");${EOL}`;\n }\n \n\n /**\n * Generates an ES6 Import Statement.\n * @param {string} module - Module (path).\n * @param {string[]} defaultMembers - Default Member Part.\n * @param {string[]} members - Member Part.\n * @returns {string} - ES6 Import Statement.\n */\n makeES6Statement(module, defaultMembers, members) {\n const memberStrArray = [];\n \n if (defaultMembers.length) {\n memberStrArray.push(\n defaultMembers.join(\", \")\n );\n }\n\n if (members.length) {\n memberStrArray.push(\n \"{ \" + members.join(\", \") + \" }\"\n );\n }\n\n let memberPart = memberStrArray.join(\", \");\n if (memberPart) {\n memberPart += \" from \";\n }\n\n return `import ${memberPart}'${module}';${EOL}`;\n }\n\n\n /**\n * Inserts an Import Statement to the top\n * of the file or after the last found import\n * statement.\n * @param {string} statement - Import Statement.\n * @param {number} pos - 'top' or 'bottom'\n */\n insertStatement(statement, pos, type) {\n\n let index = 0;\n\n if (pos !== \"top\" && this.imports[type].count > 0) {\n index = this.imports[type].units.at(-1).end;\n\n // move the index if the following char is a newline\n // (if the line was removed in an earlier operation\n // this will throw an error, don't do any change in\n // this case\n\n let nextChar;\n try {\n nextChar = this.code.slice(index, index+1);\n } catch {\n nextChar = null;\n }\n\n if (nextChar === \"\\r\") {\n index ++;\n }\n if (nextChar === \"\\n\") {\n index ++;\n }\n }\n \n else {\n // find the first meaningful (not a comment)\n // code and use the start as insertion point\n \n index = this.parsedCode.body.at(0).start;\n }\n \n this.code.appendRight(index, statement);\n }\n\n\n /**\n * Inserts an Import Statement before or after\n * a given unit. Also an existing statement can be\n * replaced.\n * @param {Object} unit - Unit Object \n * @param {string} mode - 'append'|'prepend'|'replace' \n * @param {string} statement - Import Statement. \n */\n insertAtUnit(unit, mode, statement) {\n\n let index;\n if (mode === \"append\") {\n index = unit.end;\n if (this.code.slice(index, index+1) === \"\\r\") {\n index ++;\n }\n if (this.code.slice(index, index+1) === \"\\n\") {\n index ++;\n }\n this.code.appendRight(index, statement);\n }\n \n else if (mode === \"prepend\") {\n index = unit.start;\n this.code.prependLeft(index, statement);\n }\n\n else if (mode === \"replace\") {\n // remove new line from statement\n statement = statement.slice(0, -1);\n \n this.code.overwrite(unit.start, unit.end, statement);\n unit.methods.makeUntraceable();\n this.imports[unit.type].count --;\n }\n }\n\n\n // ________________________ //\n // global debugging methods //\n\n \n /**\n * Debug statements created by IM.\n * @param {string} code - Code Snippet String.\n * @param {Object} [target] - Target Unit Object.\n * @param {string} [type] - Target type.\n * @param {string} [mode] - Insert position or attach mode.\n */\n logCreations(code, target, type, mode) {\n let msg = {\n addCode: code\n };\n if (target) {\n msg.mode = mode;\n msg.targetType = target.type;\n msg.targetUnit = target.methods.log(false);\n } else if (type) {\n msg.insert = mode;\n msg.targetType = type;\n }\n throw new DebuggingError(msg);\n }\n\n\n /**\n * Debugging method to stop the building process\n * and list all import units with its id, hash and\n * import statement.\n */\n logUnits() {\n throw new DebuggingError(this.#listAllUnits());\n }\n\n\n /**\n * Debugging method to stop the building process\n * and list the complete import object.\n */\n logUnitObjects() {\n const imports = {...this.imports};\n for (const key in imports) {\n imports[key].units.forEach(unit => {\n unit.code = [ unit.code.toString() ];\n });\n }\n throw new DebuggingError(imports);\n }\n\n\n /**\n * Warnings with spam protection. Can use internal\n * and native rollup method.\n * @param {string} msg - Warning Message. \n */\n warning(msg) {\n const hash = simpleHash(msg);\n\n if (this.warnSpamProtection.has(hash)) {\n return;\n }\n\n this.warnSpamProtection.add(hash);\n this.warn(msg);\n }\n}\n\n\n/**\n * A (simple as it gets) hash from string function.\n * @see https://gist.github.com/iperelivskiy/4110988?permalink_comment_id=2697447#gistcomment-2697447\n * @see https://gist.github.com/badboy/6267743#knuths-multiplicative-method\n * @param {string} input \n * @returns {number} - Hash number.\n */\nconst simpleHash = (input) => {\n let h = 0xdeadbeef;\n for (let i=0; i>> 16) >>> 0;\n};\n\nexport { ImportManager, DebuggingError, MatchError, simpleHash };\n"],"names":["parse","bold","yellow","fullWalk","EOL"],"mappings":"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"} -\ No newline at end of file -diff --git a/node_modules/import-manager/src/core.js b/node_modules/import-manager/src/core.js -index 28e1703..c806ecd 100644 ---- a/node_modules/import-manager/src/core.js -+++ b/node_modules/import-manager/src/core.js -@@ -335,7 +335,9 @@ class ImportManager { - start: node.source.start - node.start, - end: node.source.end - node.start, - type: "string", -- quotes: node.source.raw.at(0) -+ quotes: node.source.raw.at(0), -+ // EDIT: added module's raw source code -+ sourceRaw: node.source.raw - }; - - -@@ -367,7 +369,9 @@ class ImportManager { - const module = { - name: importObject.source.value.split("/").at(-1) || "N/A", - start: importObject.source.start - node.start, -- end: importObject.source.end - node.start -+ end: importObject.source.end - node.start, -+ // EDIT: added module's raw source code -+ sourceRaw: importObject.source.raw - }; - - if (importObject.source.type === "Literal") { -@@ -403,7 +407,9 @@ class ImportManager { - const module = { - name: modulePart.value.split("/").at(-1) || "N/A", - start: modulePart.start - node.start, -- end: modulePart.end - node.start -+ end: modulePart.end - node.start, -+ // EDIT: added module's raw source code -+ sourceRaw: modulePart.raw - }; - - if (modulePart.type === "Literal") { -@@ -464,7 +470,7 @@ class ImportManager { - - /** - * Selects a unit by its module name. -- * @param {string} name - Module Name. -+ * @param {string|RegExp} name - Module Name. - * @param {string|string[]} [type] - "cjs", "dynamic", "es6" one as a string or multiple as array of strings - * @param {boolean} allowNull - If false the module must be found or a MatchError is thrown. - * @returns {Object} - An explicit unit. -@@ -502,7 +508,8 @@ class ImportManager { - - // filter for unit name - const units = unitList.filter(unit => { -- const match = unit.module.name.indexOf(name) > -1; -+ // EDIT: unit.module can now be a string or a regex -+ const match = name instanceof RegExp ? unit.module.name !== undefined && name.test(unit.module.name) : unit.module.name.indexOf(name) > -1; - - // ignore deleted units - if (match && unit.module.name.match(/^\(deleted\)/)) { -diff --git a/node_modules/import-manager/src/unit-methods.js b/node_modules/import-manager/src/unit-methods.js -index 26534df..1a50d0d 100644 ---- a/node_modules/import-manager/src/unit-methods.js -+++ b/node_modules/import-manager/src/unit-methods.js -@@ -48,21 +48,27 @@ export default class ImportManagerUnitMethods { - - /** - * Changes the module part of a import statement. -- * @param {string} name - The new module part/path. -+ * @param {string | (moduleSourceRaw: string) => string} name - The new module part/path or a function -+ * that receives the module's raw source code (including quotes if present) and returns the new module part/path. - * @param {*} modType - Module type (literal|raw). -+ * EDIT: Added support for name (aka rename in rollup plugin action) to be a function - */ - renameModule(name, modType) { -- if (modType === "string") { -- if (!this.unit.module.quotes) { -- this.unit.module.quotes = "\""; -+ const isNameAFn = typeof name === 'function'; -+ -+ if (!isNameAFn) { -+ if (modType === "string") { -+ if (!this.unit.module.quotes) { -+ this.unit.module.quotes = "\""; -+ } -+ const q = this.unit.module.quotes; -+ name = q + name + q; -+ } else if (modType !== "raw") { -+ throw new TypeError(`Unknown modType '${modType}'. Valid types are 'string' and 'raw'.`); - } -- const q = this.unit.module.quotes; -- name = q + name + q; -- } else if (modType !== "raw") { -- throw new TypeError(`Unknown modType '${modType}'. Valid types are 'string' and 'raw'.`); - } - -- this.unit.code.overwrite(this.unit.module.start, this.unit.module.end, name); -+ this.unit.code.overwrite(this.unit.module.start, this.unit.module.end, isNameAFn ? name(this.unit.module.sourceRaw) : name); - - if (this.unit.type === "es6") { - this.updateUnit(); diff --git a/patches/rollup-plugin-import-manager+0.5.3.patch b/patches/rollup-plugin-import-manager+0.5.3.patch deleted file mode 100644 index 8e952f6..0000000 --- a/patches/rollup-plugin-import-manager+0.5.3.patch +++ /dev/null @@ -1,26 +0,0 @@ -diff --git a/node_modules/rollup-plugin-import-manager/README.md b/node_modules/rollup-plugin-import-manager/README.md -index f1bbebd..b13192a 100644 ---- a/node_modules/rollup-plugin-import-manager/README.md -+++ b/node_modules/rollup-plugin-import-manager/README.md -@@ -162,7 +162,7 @@ This is where the plugin comes to life. Here is the place where units are gettin - --- - - #### `module` [option for units] --Type: `String` -+Type: `String` | `RexExp` - Default: `null` - - Selects a unit by its module name. Each import has a name object. This is constructed from the module. -@@ -353,10 +353,10 @@ An option to target an alias of a [selected](#select-option-for-actions) `defaul - - - ##### `rename` [option for actions] --Type: `String` -+Type: `String` | `(moduleSourceRaw: string) => string` - Default: `null` - --This option is used to rename a [selected](#select-option-for-actions) specific part (`defaultMember`, `member`, `module`). The value is the new name of the selected part. See this [example](#changing-the-module). -+This option is used to rename a [selected](#select-option-for-actions) specific part (`defaultMember`, `member`, `module`). The value is a string of the new name of the selected part. See this [example](#changing-the-module). If the selected part is `module`, the value could alternatively be a function accepting the whole raw module source (ex: `"./module-name"` including quotes) and returning the whole new name (ex: `"./newmodule-name"` including quotes). - - - ##### `modType` [option for actions] From cec8985ac05728bc82f0d3becde681d2f4708ace Mon Sep 17 00:00:00 2001 From: tjcouch-sil Date: Mon, 15 May 2023 10:10:07 -0500 Subject: [PATCH 20/61] Used imports in web view --- lib/extension-template.web-view.tsx | 3 +-- vite/vite-web-view.config.ts | 12 ------------ 2 files changed, 1 insertion(+), 14 deletions(-) diff --git a/lib/extension-template.web-view.tsx b/lib/extension-template.web-view.tsx index 39e9fec..884aa20 100644 --- a/lib/extension-template.web-view.tsx +++ b/lib/extension-template.web-view.tsx @@ -1,8 +1,7 @@ import papi from "papi"; -import React from "react"; +import { useState } from "react"; import { QuickVerseDataProvider } from "extension-types"; -const { useState } = React; const { react: { hooks: { useData, useDataProvider }, diff --git a/vite/vite-web-view.config.ts b/vite/vite-web-view.config.ts index ca90960..37adc00 100644 --- a/vite/vite-web-view.config.ts +++ b/vite/vite-web-view.config.ts @@ -7,14 +7,11 @@ import { defineConfig } from "vite"; import path from "path"; import react from "@vitejs/plugin-react"; -import { importManager } from "rollup-plugin-import-manager"; -import escapeStringRegexp from "escape-string-regexp"; import { getFileExtensionByModuleFormat, getWebViewTsxPaths, paranextProvidedModules, webViewTempDir, - webViewTsxGlob, } from "./vite.util"; // https://vitejs.dev/config/ @@ -29,15 +26,6 @@ const webViewConfig = defineConfig(async () => { plugins: [ // use React.createElement react({ jsxRuntime: "classic" }), - // Remove the Paranext global modules from the imports in React web views because they are provided globally - importManager({ - include: webViewTsxGlob, - units: paranextProvidedModules.map((module) => ({ - // Match the whole module name, nothing more, nothing less - module: new RegExp(`^${escapeStringRegexp(module)}$`), - actions: "remove", - })), - }), ], build: { // This project is a library as it is being used in Paranext From e10fc2fb66e76b1720d92ad665b3da5a362c26be Mon Sep 17 00:00:00 2001 From: tjcouch-sil Date: Mon, 15 May 2023 14:50:51 -0500 Subject: [PATCH 21/61] Added notice about import manager false positive --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index b756e16..f3ab2a2 100644 --- a/README.md +++ b/README.md @@ -68,3 +68,9 @@ Vite packages the extension together into the `dist` folder: - Packages dependencies into the main file - Generates sourcemaps for the file - Packages everything up into an extension folder in `dist` + +Note: When performing the second build step, the following line may occur in your console. Please feel free to ignore it as it is a false positive. It is likely showing because WebViews are embedded in the entry file: + +```bash +transforming (1) lib\main.ts[plugin:ImportManager] It seems like there are multiple imports of module 'react'. You should examine that. +``` From aebf2fa8470bad4c9001055ddf65aa69c6082cb5 Mon Sep 17 00:00:00 2001 From: tjcouch-sil Date: Mon, 15 May 2023 17:53:08 -0500 Subject: [PATCH 22/61] Updated calls to addWebView --- lib/main.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/main.ts b/lib/main.ts index 8b34e6c..77490a5 100644 --- a/lib/main.ts +++ b/lib/main.ts @@ -147,13 +147,15 @@ export async function activate() { ]; papi.webViews.addWebView({ - contents: extensionTemplateReact, + id: 'Extension template WebView React', + content: extensionTemplateReact, styles: extensionTemplateReactStyles, }); - + papi.webViews.addWebView({ + id: 'Extension template WebView HTML', contentType: 'html' as WebViewContentType.HTML, - contents: extensionTemplateHtml, + content: extensionTemplateHtml, }); // For now, let's just make things easy and await the data provider promise at the end so we don't hold everything else up From fe6588ac4ba6a425d6d1540db8e695db0dddf96d Mon Sep 17 00:00:00 2001 From: tjcouch-sil Date: Tue, 16 May 2023 08:51:01 -0500 Subject: [PATCH 23/61] Update rollup-plugin-import-manager to latest --- package-lock.json | 30 +++++++++++++++--------------- package.json | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index b2a0fbb..787e914 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,7 +22,7 @@ "glob": "^10.2.2", "papi-dts": "file:../paranext-core/lib/papi-dts", "patch-package": "^7.0.0", - "rollup-plugin-import-manager": "^0.6.1", + "rollup-plugin-import-manager": "^0.6.2", "rollup-plugin-string": "^3.0.0", "sass": "^1.62.1", "typescript": "^4.9.3", @@ -1704,9 +1704,9 @@ "dev": true }, "node_modules/import-manager": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/import-manager/-/import-manager-0.4.1.tgz", - "integrity": "sha512-pp+HGlNqBHSt3qKBuvD1TsKm26Ysb+6Fy57tdRYfAi6jb+oiaAES5BKZblnREjOso6zbXCcMHI2vQvuMn8ZdoQ==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/import-manager/-/import-manager-0.4.2.tgz", + "integrity": "sha512-rsBYufGO0lhIcHWrsrrCRh++Vu7rW/e32TzOdZJgApbzGWIk2svDGESqQHoH6eeesKAKsFXEO5+EOTi1S2r/XA==", "dev": true, "dependencies": { "acorn": "^8.8.2", @@ -2423,15 +2423,15 @@ } }, "node_modules/rollup-plugin-import-manager": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/rollup-plugin-import-manager/-/rollup-plugin-import-manager-0.6.1.tgz", - "integrity": "sha512-OGdtwxSqMvB6549wS4rq0rmfow3SLaUtYlDsaSRVHTpCkekqna9bpavz+3zo05M5LM3iO1aMCahpWpRIItVLtA==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-import-manager/-/rollup-plugin-import-manager-0.6.2.tgz", + "integrity": "sha512-pQOXlR8xhgExuMXyc7j0JOu5wFsGKZKM1CEe0e48ILHtqTwP1T22lyunjas71unc5lueSzF8cEAqMZ+kSBeN8w==", "dev": true, "dependencies": { "@rollup/pluginutils": "^5.0.2", "colorette": "^2.0.20", "diff": "^5.1.0", - "import-manager": "^0.4.1" + "import-manager": "^0.4.2" } }, "node_modules/rollup-plugin-string": { @@ -4063,9 +4063,9 @@ "dev": true }, "import-manager": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/import-manager/-/import-manager-0.4.1.tgz", - "integrity": "sha512-pp+HGlNqBHSt3qKBuvD1TsKm26Ysb+6Fy57tdRYfAi6jb+oiaAES5BKZblnREjOso6zbXCcMHI2vQvuMn8ZdoQ==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/import-manager/-/import-manager-0.4.2.tgz", + "integrity": "sha512-rsBYufGO0lhIcHWrsrrCRh++Vu7rW/e32TzOdZJgApbzGWIk2svDGESqQHoH6eeesKAKsFXEO5+EOTi1S2r/XA==", "dev": true, "requires": { "acorn": "^8.8.2", @@ -4581,15 +4581,15 @@ } }, "rollup-plugin-import-manager": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/rollup-plugin-import-manager/-/rollup-plugin-import-manager-0.6.1.tgz", - "integrity": "sha512-OGdtwxSqMvB6549wS4rq0rmfow3SLaUtYlDsaSRVHTpCkekqna9bpavz+3zo05M5LM3iO1aMCahpWpRIItVLtA==", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-import-manager/-/rollup-plugin-import-manager-0.6.2.tgz", + "integrity": "sha512-pQOXlR8xhgExuMXyc7j0JOu5wFsGKZKM1CEe0e48ILHtqTwP1T22lyunjas71unc5lueSzF8cEAqMZ+kSBeN8w==", "dev": true, "requires": { "@rollup/pluginutils": "^5.0.2", "colorette": "^2.0.20", "diff": "^5.1.0", - "import-manager": "^0.4.1" + "import-manager": "^0.4.2" } }, "rollup-plugin-string": { diff --git a/package.json b/package.json index 1a492f4..5ff526b 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "glob": "^10.2.2", "papi-dts": "file:../paranext-core/lib/papi-dts", "patch-package": "^7.0.0", - "rollup-plugin-import-manager": "^0.6.1", + "rollup-plugin-import-manager": "^0.6.2", "rollup-plugin-string": "^3.0.0", "sass": "^1.62.1", "typescript": "^4.9.3", From c10f4a2ea2e01ce255899e322aa1b852ef7442a3 Mon Sep 17 00:00:00 2001 From: Ira Hopkinson Date: Thu, 18 May 2023 09:08:17 +1200 Subject: [PATCH 24/61] Replace NODE_ENV on WebViews in Vite (#12) --- vite/vite-web-view.config.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/vite/vite-web-view.config.ts b/vite/vite-web-view.config.ts index 37adc00..1cd5fde 100644 --- a/vite/vite-web-view.config.ts +++ b/vite/vite-web-view.config.ts @@ -15,7 +15,7 @@ import { } from "./vite.util"; // https://vitejs.dev/config/ -const webViewConfig = defineConfig(async () => { +const webViewConfig = defineConfig(async ({ mode }) => { /** List of TypeScript WebView files to transpile */ const tsxWebViews = await getWebViewTsxPaths(); @@ -27,6 +27,9 @@ const webViewConfig = defineConfig(async () => { // use React.createElement react({ jsxRuntime: "classic" }), ], + // Since Vite is in library mode `process` is not replaced by default and that won't work in the + // renderer. + define: { 'process.env.NODE_ENV': JSON.stringify(mode) }, build: { // This project is a library as it is being used in Paranext lib: { From 19b7a9095425d3f806886677992def8968f6f0a5 Mon Sep 17 00:00:00 2001 From: tjcouch-sil Date: Thu, 25 May 2023 18:27:32 -0500 Subject: [PATCH 25/61] Updated data provider to data type api, other updates to match existing extension code to show other features and such --- lib/extension-template-html.web-view.ejs | 165 ++++++++++++++--------- lib/extension-template.web-view.tsx | 4 +- lib/main.ts | 153 +++++++++++++++------ public/assets/heresy-warning.txt | 1 + public/paranext-extension-template.d.ts | 11 +- 5 files changed, 222 insertions(+), 112 deletions(-) create mode 100644 public/assets/heresy-warning.txt diff --git a/lib/extension-template-html.web-view.ejs b/lib/extension-template-html.web-view.ejs index 542a4bc..e59e334 100644 --- a/lib/extension-template-html.web-view.ejs +++ b/lib/extension-template-html.web-view.ejs @@ -10,7 +10,7 @@
Extension Template HTML
-
-
-
Any Greetings Updates: 0
-
- Any Greetings Updates (via Bill): 0 +
+
+
+
All Updates: 0
+
Any Greetings Updates (via Bill): 0
Bill Greetings Updates: 0
+
Any Age Updates (via Bill): 0
+
Bill Age Updates: 0
diff --git a/webpack/webpack.config.base.ts b/webpack/webpack.config.base.ts index b364f14..feed370 100644 --- a/webpack/webpack.config.base.ts +++ b/webpack/webpack.config.base.ts @@ -10,6 +10,16 @@ const shouldGenerateSourceMaps = isDev || process.env.DEBUG_PROD; /** The base directory from which webpack should operate (should be the root repo folder) */ export const rootDir = path.resolve(__dirname, ".."); +/** + * The module format of library we want webpack to use for externals and create for our extensions + * + * @see webpack.Configuration['externalsTye'] for info about external import format + * @see webpack.LibraryOptions['type'] for info about library format + */ +// commonjs-static formats the code to export everything on module.exports. so it works +// well in cjs or esm https://webpack.js.org/configuration/output/#type-commonjs-static +export const LIBRARY_TYPE: NonNullable = 'commonjs-static'; + // Note: we do not want to do any chunking because neither webViews nor main can import dependencies // other than those listed in configBase.externals. Each webView must contain all its dependency // code, and main must contain all its dependency code. @@ -17,25 +27,25 @@ export const rootDir = path.resolve(__dirname, ".."); const configBase: webpack.Configuration = { // The operating directory for webpack instead of current working directory context: rootDir, - mode: isDev ? "development" : "production", + mode: isDev ? 'development' : 'production', // Bundle the sourcemap into the file since webviews are injected as strings into the main file - devtool: shouldGenerateSourceMaps ? "inline-source-map" : false, + devtool: shouldGenerateSourceMaps ? 'inline-source-map' : false, watchOptions: { - ignored: ["**/node_modules"], + ignored: ['**/node_modules'], }, // Use require for externals as it is the only type of importing that Paranext supports // https://webpack.js.org/configuration/externals/#externalstypecommonjs - externalsType: "commonjs", + externalsType: LIBRARY_TYPE, // Modules that Paranext supplies to extensions https://webpack.js.org/configuration/externals/ // All other dependencies must be bundled into the extension externals: [ - "react", - "react/jsx-runtime", - "react-dom", - "react-dom/client", - "papi-frontend", - "papi-backend", - "@sillsdev/scripture", + 'react', + 'react/jsx-runtime', + 'react-dom', + 'react-dom/client', + 'papi-frontend', + 'papi-backend', + '@sillsdev/scripture', ], module: { // Please keep these JSDocs up-to-date with their counterparts in `webpack-env.d.ts` @@ -51,7 +61,7 @@ const configBase: webpack.Configuration = { // https://webpack.js.org/guides/asset-modules/#replacing-inline-loader-syntax { resourceQuery: /inline/, - type: "asset/source", + type: 'asset/source', }, // Load TypeScript with SWC https://swc.rs/docs/usage/swc-loader // If this seems to cause problems, you can try switching to ts-loader for more compatibility @@ -59,7 +69,7 @@ const configBase: webpack.Configuration = { { test: /\.tsx?$/, use: { - loader: "swc-loader", + loader: 'swc-loader', options: { // Lots of configuration at https://swc.rs/docs/configuration/compilation - if building // isn't working because of some error that looks like normal code, it may be something @@ -67,7 +77,7 @@ const configBase: webpack.Configuration = { // Found how to configure at https://stackoverflow.com/questions/76671009/how-to-properly-configure-swc-loader-with-webpack-when-switching-from-ts-loader jsc: { parser: { - syntax: "typescript", + syntax: 'typescript', tsx: true, decorators: true, }, @@ -88,7 +98,7 @@ const configBase: webpack.Configuration = { // We are not using css-loader since we are getting style files using ?inline. css-loader // would allow us to import CSS into CommonJS // Compiles Sass to CSS - "sass-loader", + 'sass-loader', ], }, /** @@ -100,7 +110,7 @@ const configBase: webpack.Configuration = { // https://webpack.js.org/guides/asset-management/#loading-images { test: /\.(png|svg|jpg|jpeg|gif)$/i, - type: "asset/inline", + type: 'asset/inline', }, /** * Load fonts as data uris @@ -111,7 +121,7 @@ const configBase: webpack.Configuration = { // https://webpack.js.org/guides/asset-management/#loading-fonts { test: /\.(woff|woff2|eot|ttf|otf)$/i, - type: "asset/inline", + type: 'asset/inline', }, /** * Import files with no transformation as strings with "./file?raw" @@ -120,14 +130,14 @@ const configBase: webpack.Configuration = { // https://webpack.js.org/guides/asset-modules/#replacing-inline-loader-syntax { resourceQuery: /raw/, - type: "asset/source", + type: 'asset/source', }, ], }, resolve: { // If no file extension is provided on file path imports, use these extensions left-to-right // https://webpack.js.org/guides/typescript/#basic-setup - extensions: [".tsx", ".ts", ".js"], + extensions: ['.tsx', '.ts', '.js'], plugins: [ // use tsconfig.json paths https://www.npmjs.com/package/tsconfig-paths-webpack-plugin new TsconfigPathsPlugin(), diff --git a/webpack/webpack.config.main.ts b/webpack/webpack.config.main.ts index 3f07ded..22291f3 100644 --- a/webpack/webpack.config.main.ts +++ b/webpack/webpack.config.main.ts @@ -1,20 +1,32 @@ -import webpack from "webpack"; -import path from "path"; -import merge from "webpack-merge"; -import CopyPlugin from "copy-webpack-plugin"; -import configBase, { rootDir } from "./webpack.config.base"; -import WebViewResolveWebpackPlugin from "./web-view-resolve-webpack-plugin"; +import webpack from 'webpack'; +import path from 'path'; +import merge from 'webpack-merge'; +import CopyPlugin from 'copy-webpack-plugin'; +import configBase, { LIBRARY_TYPE, rootDir } from './webpack.config.base'; +import WebViewResolveWebpackPlugin from './web-view-resolve-webpack-plugin'; +import { outputFolder } from './webpack.util'; /** webpack configuration for building main */ const configMain: webpack.Configuration = merge(configBase, { // #region shared with https://github.com/paranext/paranext-core/blob/main/extensions/webpack/webpack.config.main.ts // Build for node since Paranext loads this in node https://webpack.js.org/concepts/targets/ - target: "node", + target: 'node', // configuration name - name: "main", + name: 'main', // wait until webView bundling finishes - webpack.config.web-view.ts - dependencies: ["webView"], + dependencies: ['webView'], + // Instructions on what output to create + output: { + // extension output directory + path: path.resolve(rootDir, outputFolder), + // Exporting the library https://webpack.js.org/guides/author-libraries/#expose-the-library + library: { + type: LIBRARY_TYPE, + }, + // Empty the output folder before building + clean: true, + }, resolve: { plugins: [ // Get web view files from the temp dir where they are built @@ -25,30 +37,24 @@ const configMain: webpack.Configuration = merge(configBase, { // #endregion // extension main source file to build - entry: "./src/main.ts", - output: { - // extension output directory - path: path.resolve(rootDir, "dist"), - filename: "paranext-extension-template.js", - // Exporting the library https://webpack.js.org/guides/author-libraries/#expose-the-library - globalObject: "globalThis", - library: { - name: "paranextExtensionTemplate", - type: "umd", + // Note: this could have just been the import string if we put the filename in `output`, but + // splitting it out like this allows us to share `output` with `paranext-core`. + entry: { + main: { + import: './src/main.ts', + filename: 'paranext-extension-template.js', }, - // Empty the output folder before building - clean: true, }, plugins: [ // Copy static files to the output folder https://webpack.js.org/plugins/copy-webpack-plugin/ new CopyPlugin({ patterns: [ // We want all files from the public folder copied into the output folder - { from: "public", to: "./" }, + { from: 'public', to: './' }, // Copy this extension's type declaration file into the output folder - { from: "src/types/paranext-extension-template.d.ts", to: "./" }, + { from: 'src/types/paranext-extension-template.d.ts', to: './' }, // We need to distribute the package.json for Paranext to read the extension properly - { from: "package.json", to: "./" }, + { from: 'package.json', to: './' }, ], }), ], diff --git a/webpack/webpack.util.ts b/webpack/webpack.util.ts index 12f9e66..ce819e9 100644 --- a/webpack/webpack.util.ts +++ b/webpack/webpack.util.ts @@ -1,6 +1,6 @@ -import webpack from "webpack"; -import path from "path"; -import { glob } from "glob"; +import webpack from 'webpack'; +import path from 'path'; +import { glob } from 'glob'; // #region shared with https://github.com/paranext/paranext-core/blob/main/extensions/webpack/webpack.util.ts @@ -10,12 +10,12 @@ import { glob } from "glob"; * * Web Views should be named .web-view. */ -const webViewTag = ".web-view"; +const webViewTag = '.web-view'; /** * Glob filename matcher for React web views. * React Web Views should be named .web-view.tsx */ -const webViewTsxGlob = "**/*.web-view.tsx"; +const webViewTsxGlob = '**/*.web-view.tsx'; /** * Regex file name matcher for React web views. * React Web Views should be named .web-view.tsx @@ -24,14 +24,17 @@ const webViewTsxGlob = "**/*.web-view.tsx"; */ export const webViewTsxRegex = /.+\.web-view(\.[tj]sx)?$/; /** Name of adjacent folder used to store bundled WebView files */ -export const webViewTempDir = "temp-build"; +export const webViewTempDir = 'temp-build'; + +/** Folder containing the built extension files */ +export const outputFolder = 'dist'; /** * Get a list of TypeScript WebView files to bundle. * Path relative to project root */ function getWebViewTsxPaths() { - return glob(webViewTsxGlob, { ignore: "node_modules/**" }); + return glob(webViewTsxGlob, { ignore: 'node_modules/**' }); } /** @@ -42,7 +45,7 @@ function getWebViewTsxPaths() { */ export function getWebViewTempPath( webViewPath: string, - join: (path: string, request: string) => string = path.join + join: (path: string, request: string) => string = path.join, ) { const webViewInfo = path.parse(webViewPath); @@ -51,9 +54,9 @@ export function getWebViewTempPath( const webViewName = webViewInfo.ext === webViewTag ? webViewInfo.base : webViewInfo.name; // Put transpiled WebViews in a temp folder in the same directory as the original WebView // Make sure to preserve the ./ to indicate it is a relative path - return `${webViewPath.startsWith("./") ? "./" : ""}${join( + return `${webViewPath.startsWith('./') ? './' : ''}${join( webViewInfo.dir, - join(webViewTempDir, `${webViewName}.js`) + join(webViewTempDir, `${webViewName}.js`), )}`; } @@ -71,7 +74,7 @@ export async function getWebViewEntries(): Promise { import: webViewPath, filename: getWebViewTempPath(webViewPath), } as webpack.EntryObject[string], - ]) + ]), ); return webViewEntries; } From 4f184fdee8ed0545423530ef14412f7f6b89048a Mon Sep 17 00:00:00 2001 From: tjcouch-sil Date: Tue, 25 Jul 2023 11:52:08 -0500 Subject: [PATCH 52/61] Prettier formatted all files --- .vscode/launch.json | 106 ++++++++++----------- src/extension-template-2.web-view.tsx | 38 ++++---- src/extension-template.web-view.tsx | 38 ++++---- src/types/paranext-extension-template.d.ts | 17 ++-- src/webpack-env.d.ts | 30 +++--- webpack.config.ts | 6 +- webpack/web-view-resolve-webpack-plugin.ts | 16 ++-- webpack/webpack.config.base.ts | 10 +- webpack/webpack.config.web-view.ts | 12 +-- 9 files changed, 136 insertions(+), 137 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 3d7335e..23603d6 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -1,57 +1,57 @@ { - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - { - "name": "Watch and Build Extension", - "type": "node", - "request": "launch", - "runtimeExecutable": "npm", - "skipFiles": ["/**"], - "runtimeArgs": ["run", "watch"] + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Watch and Build Extension", + "type": "node", + "request": "launch", + "runtimeExecutable": "npm", + "skipFiles": ["/**"], + "runtimeArgs": ["run", "watch"] + }, + { + "name": "Build WebViews", + "type": "node", + "request": "launch", + "runtimeExecutable": "npm", + "skipFiles": ["/**"], + "runtimeArgs": ["run", "build:web-view"] + }, + { + "name": "Build Main", + "type": "node", + "request": "launch", + "runtimeExecutable": "npm", + "skipFiles": ["/**"], + "runtimeArgs": ["run", "build:main"] + }, + { + "name": "Build Extension", + "type": "node", + "request": "launch", + "runtimeExecutable": "npm", + "skipFiles": ["/**"], + "runtimeArgs": ["run", "build"] + }, + { + "name": "Debug Paranext Core with Extension", + "type": "node", + "request": "launch", + "runtimeExecutable": "npm", + "runtimeArgs": ["run", "start"], + "skipFiles": ["/**"], + "env": { + "MAIN_ARGS": "--inspect=5858 --remote-debugging-port=9223", + "IN_VSCODE": "true" }, - { - "name": "Build WebViews", - "type": "node", - "request": "launch", - "runtimeExecutable": "npm", - "skipFiles": ["/**"], - "runtimeArgs": ["run", "build:web-view"] - }, - { - "name": "Build Main", - "type": "node", - "request": "launch", - "runtimeExecutable": "npm", - "skipFiles": ["/**"], - "runtimeArgs": ["run", "build:main"] - }, - { - "name": "Build Extension", - "type": "node", - "request": "launch", - "runtimeExecutable": "npm", - "skipFiles": ["/**"], - "runtimeArgs": ["run", "build"] - }, - { - "name": "Debug Paranext Core with Extension", - "type": "node", - "request": "launch", - "runtimeExecutable": "npm", - "runtimeArgs": ["run", "start"], - "skipFiles": ["/**"], - "env": { - "MAIN_ARGS": "--inspect=5858 --remote-debugging-port=9223", - "IN_VSCODE": "true" - }, - "presentation": { - "hidden": false, - "group": "", - "order": 1 - } + "presentation": { + "hidden": false, + "group": "", + "order": 1 } - ] + } + ] } diff --git a/src/extension-template-2.web-view.tsx b/src/extension-template-2.web-view.tsx index d9481e4..eb3c1dc 100644 --- a/src/extension-template-2.web-view.tsx +++ b/src/extension-template-2.web-view.tsx @@ -1,12 +1,12 @@ -import papi from "papi-frontend"; -import { useCallback, useState } from "react"; +import papi from 'papi-frontend'; +import { useCallback, useState } from 'react'; import { DoStuffEvent, ExtensionVerseDataProvider, ExtensionVerseDataTypes, -} from "paranext-extension-template"; -import { Button } from "papi-components"; -import { QuickVerseDataTypes } from "quick-verse"; +} from 'paranext-extension-template'; +import { Button } from 'papi-components'; +import { QuickVerseDataTypes } from 'quick-verse'; const { react: { @@ -19,24 +19,24 @@ globalThis.webViewComponent = function ExtensionTemplate2() { const [clicks, setClicks] = useState(0); useEvent( - "extensionTemplate.doStuff", - useCallback(({ count }) => setClicks(count), []) + 'extensionTemplate.doStuff', + useCallback(({ count }) => setClicks(count), []), ); const extensionVerseDataProvider = useDataProvider( - "paranextExtensionTemplate.quickVerse" + 'paranextExtensionTemplate.quickVerse', ); - const [latestExtensionVerseText] = useData.Verse( + const [latestExtensionVerseText] = useData.Verse( extensionVerseDataProvider, - "latest", - "Loading latest Scripture text from extension template..." + 'latest', + 'Loading latest Scripture text from extension template...', ); - const [latestQuickVerseText] = useData.Verse( - "quickVerse.quickVerse", - "latest", - "Loading latest Scripture text from extension template..." + const [latestQuickVerseText] = useData.Verse( + 'quickVerse.quickVerse', + 'latest', + 'Loading latest Scripture text from extension template...', ); return ( @@ -51,12 +51,14 @@ globalThis.webViewComponent = function ExtensionTemplate2() { onClick={async () => { const start = performance.now(); const result = await papi.commands.sendCommand( - "extensionTemplate.doStuff", - "Extension Template React Component" + 'extensionTemplate.doStuff', + 'Extension Template React Component', ); setClicks(clicks + 1); logger.info( - `command:extensionTemplate.doStuff '${result.response}' took ${performance.now() - start} ms` + `command:extensionTemplate.doStuff '${result.response}' took ${ + performance.now() - start + } ms`, ); }} > diff --git a/src/extension-template.web-view.tsx b/src/extension-template.web-view.tsx index a263783..777c268 100644 --- a/src/extension-template.web-view.tsx +++ b/src/extension-template.web-view.tsx @@ -1,12 +1,12 @@ -import papi from "papi-frontend"; -import { useCallback, useState } from "react"; +import papi from 'papi-frontend'; +import { useCallback, useState } from 'react'; import { DoStuffEvent, ExtensionVerseDataProvider, ExtensionVerseDataTypes, -} from "paranext-extension-template"; -import { Button } from "papi-components"; -import { QuickVerseDataTypes } from "quick-verse"; +} from 'paranext-extension-template'; +import { Button } from 'papi-components'; +import { QuickVerseDataTypes } from 'quick-verse'; const { react: { @@ -19,24 +19,24 @@ globalThis.webViewComponent = function ExtensionTemplate() { const [clicks, setClicks] = useState(0); useEvent( - "extensionTemplate.doStuff", - useCallback(({ count }) => setClicks(count), []) + 'extensionTemplate.doStuff', + useCallback(({ count }) => setClicks(count), []), ); const extensionVerseDataProvider = useDataProvider( - "paranextExtensionTemplate.quickVerse" + 'paranextExtensionTemplate.quickVerse', ); - const [latestExtensionVerseText] = useData.Verse( + const [latestExtensionVerseText] = useData.Verse( extensionVerseDataProvider, - "latest", - "Loading latest Scripture text from extension template..." + 'latest', + 'Loading latest Scripture text from extension template...', ); - const [latestQuickVerseText] = useData.Verse( - "quickVerse.quickVerse", - "latest", - "Loading latest Scripture text from extension template..." + const [latestQuickVerseText] = useData.Verse( + 'quickVerse.quickVerse', + 'latest', + 'Loading latest Scripture text from extension template...', ); return ( @@ -51,12 +51,14 @@ globalThis.webViewComponent = function ExtensionTemplate() { onClick={async () => { const start = performance.now(); const result = await papi.commands.sendCommand( - "extensionTemplate.doStuff", - "Extension Template React Component" + 'extensionTemplate.doStuff', + 'Extension Template React Component', ); setClicks(clicks + 1); logger.info( - `command:extensionTemplate.doStuff '${result.response}' took ${performance.now() - start} ms` + `command:extensionTemplate.doStuff '${result.response}' took ${ + performance.now() - start + } ms`, ); }} > diff --git a/src/types/paranext-extension-template.d.ts b/src/types/paranext-extension-template.d.ts index 74b92d5..e0379b0 100644 --- a/src/types/paranext-extension-template.d.ts +++ b/src/types/paranext-extension-template.d.ts @@ -1,5 +1,5 @@ -import type { DataProviderDataType } from "shared/models/data-provider.model"; -import type IDataProvider from "shared/models/data-provider.interface"; +import type { DataProviderDataType } from 'shared/models/data-provider.model'; +import type IDataProvider from 'shared/models/data-provider.interface'; declare module 'paranext-extension-template' { export type ExtensionVerseSetData = string | { text: string; isHeresy: boolean }; @@ -7,25 +7,20 @@ declare module 'paranext-extension-template' { export type ExtensionVerseDataTypes = { Verse: DataProviderDataType; Heresy: DataProviderDataType; - Chapter: DataProviderDataType< - [book: string, chapter: number], - string | undefined, - never - >; + Chapter: DataProviderDataType<[book: string, chapter: number], string | undefined, never>; }; /** Network event that informs subscribers when the command `extensionTemplate.doStuff` is run */ export type DoStuffEvent = { /** How many times the extension template has run the command `extensionTemplate.doStuff` */ count: number; - } + }; export type ExtensionVerseDataProvider = IDataProvider; } -declare module "papi-commands" { +declare module 'papi-commands' { export interface CommandHandlers { - "extensionTemplate.doStuff": (message: string) => { response: string, occurrence: number }; + 'extensionTemplate.doStuff': (message: string) => { response: string; occurrence: number }; } } - diff --git a/src/webpack-env.d.ts b/src/webpack-env.d.ts index 4aee368..cf76dd1 100644 --- a/src/webpack-env.d.ts +++ b/src/webpack-env.d.ts @@ -15,7 +15,7 @@ * dependencies into these files before providing them, unfortunately. However, React WebView * files are an exception as they are fully bundled. */ -declare module "*?inline" { +declare module '*?inline' { const content: string; export default content; } @@ -23,7 +23,7 @@ declare module "*?inline" { /** * Import files with no transformation as strings with "./file?raw" */ -declare module "*?raw" { +declare module '*?raw' { const content: string; export default content; } @@ -31,7 +31,7 @@ declare module "*?raw" { /** * Import scss, sass, and css files as strings */ -declare module "*.scss" { +declare module '*.scss' { const content: string; export default content; } @@ -39,7 +39,7 @@ declare module "*.scss" { /** * Import scss, sass, and css files as strings */ -declare module "*.sass" { +declare module '*.sass' { const content: string; export default content; } @@ -47,7 +47,7 @@ declare module "*.sass" { /** * Import scss, sass, and css files as strings */ -declare module "*.css" { +declare module '*.css' { const content: string; export default content; } @@ -62,7 +62,7 @@ declare module "*.css" { * Note: it is advised to use the `papi-extension:` protocol to load assets as data uris are * not currently supported in Platform.Bible */ -declare module "*.png" { +declare module '*.png' { const content: string; export default content; } @@ -73,7 +73,7 @@ declare module "*.png" { * Note: it is advised to use the `papi-extension:` protocol to load assets as data uris are * not currently supported in Platform.Bible */ -declare module "*.svg" { +declare module '*.svg' { const content: string; export default content; } @@ -84,7 +84,7 @@ declare module "*.svg" { * Note: it is advised to use the `papi-extension:` protocol to load assets as data uris are * not currently supported in Platform.Bible */ -declare module "*.jpg" { +declare module '*.jpg' { const content: string; export default content; } @@ -95,7 +95,7 @@ declare module "*.jpg" { * Note: it is advised to use the `papi-extension:` protocol to load assets as data uris are * not currently supported in Platform.Bible */ -declare module "*.jpeg" { +declare module '*.jpeg' { const content: string; export default content; } @@ -106,7 +106,7 @@ declare module "*.jpeg" { * Note: it is advised to use the `papi-extension:` protocol to load assets as data uris are * not currently supported in Platform.Bible */ -declare module "*.gif" { +declare module '*.gif' { const content: string; export default content; } @@ -121,7 +121,7 @@ declare module "*.gif" { * Note: it is advised to use the `papi-extension:` protocol to load assets as data uris are * not currently supported in Platform.Bible */ -declare module "*.woff" { +declare module '*.woff' { const content: string; export default content; } @@ -132,7 +132,7 @@ declare module "*.woff" { * Note: it is advised to use the `papi-extension:` protocol to load assets as data uris are * not currently supported in Platform.Bible */ -declare module "*.woff2" { +declare module '*.woff2' { const content: string; export default content; } @@ -143,7 +143,7 @@ declare module "*.woff2" { * Note: it is advised to use the `papi-extension:` protocol to load assets as data uris are * not currently supported in Platform.Bible */ -declare module "*.eot" { +declare module '*.eot' { const content: string; export default content; } @@ -154,7 +154,7 @@ declare module "*.eot" { * Note: it is advised to use the `papi-extension:` protocol to load assets as data uris are * not currently supported in Platform.Bible */ -declare module "*.ttf" { +declare module '*.ttf' { const content: string; export default content; } @@ -165,7 +165,7 @@ declare module "*.ttf" { * Note: it is advised to use the `papi-extension:` protocol to load assets as data uris are * not currently supported in Platform.Bible */ -declare module "*.otf" { +declare module '*.otf' { const content: string; export default content; } diff --git a/webpack.config.ts b/webpack.config.ts index 6cb7f95..cfe4ac3 100644 --- a/webpack.config.ts +++ b/webpack.config.ts @@ -1,8 +1,8 @@ // #region shared with https://github.com/paranext/paranext-core/blob/main/extensions/webpack.config.ts -import webpack from "webpack"; -import configWebView from "./webpack/webpack.config.web-view"; -import configMain from "./webpack/webpack.config.main"; +import webpack from 'webpack'; +import configWebView from './webpack/webpack.config.web-view'; +import configMain from './webpack/webpack.config.main'; // Note: Using a .ts file as the webpack config requires not having "type": "module" in package.json // https://stackoverflow.com/a/76005614 diff --git a/webpack/web-view-resolve-webpack-plugin.ts b/webpack/web-view-resolve-webpack-plugin.ts index 683e6f5..49a5c84 100644 --- a/webpack/web-view-resolve-webpack-plugin.ts +++ b/webpack/web-view-resolve-webpack-plugin.ts @@ -1,7 +1,7 @@ // #region shared with https://github.com/paranext/paranext-core/blob/main/extensions/webpack/web-view-resolve-webpack-plugin.ts -import { Resolver } from "webpack"; -import { getWebViewTempPath, webViewTempDir, webViewTsxRegex } from "./webpack.util"; +import { Resolver } from 'webpack'; +import { getWebViewTempPath, webViewTempDir, webViewTsxRegex } from './webpack.util'; // Webpack resolve plugins are enhanced-resolve plugins, which use tapable under the hood. // Unfortunately, most of this api is very scantly documented, so I pretty much went off of examples @@ -19,9 +19,9 @@ export default class WebViewResolveWebpackPlugin { // However, it seems the mystery of available hooks is not solved as DirectoryNamedWebpackPlugin // uses hook names that are not in KnownHooks. /** Tap into the enhanced-resolve "resolve" hook with our resolve logic. */ - readonly source = "resolve"; + readonly source = 'resolve'; /** Feed into the enhanced-resolve "resolve" hook from our resolve logic */ - readonly target = "resolve"; + readonly target = 'resolve'; /** * Function that applies this plugin to webpack resolving. Use the resolver to "tap into" webpack @@ -39,7 +39,7 @@ export default class WebViewResolveWebpackPlugin { // Add our plugin to the list of resolvers to run .tapAsync( // Internally note that this is our plugin - "WebViewResolveWebpackPlugin", + 'WebViewResolveWebpackPlugin', /** * The logic to add to webpack resolving so it will look in the temp dir for built code. * @@ -76,7 +76,7 @@ export default class WebViewResolveWebpackPlugin { // request.query sometimes doesn't have the ?stuff in it for some reason, so get it // manually from the request path if it isn't already in request.query if (!request.query) { - const queryInd = requestPath.lastIndexOf("?"); + const queryInd = requestPath.lastIndexOf('?'); // If there is a ? and something after it in the request path, use that as the resource // query if (queryInd >= 0 && queryInd < requestPath.length - 1) { @@ -103,10 +103,10 @@ export default class WebViewResolveWebpackPlugin { }, `Added temp dir to resolve request path: ${tempViewPath}`, resolveContext, - callback + callback, ); return undefined; - } + }, ); } } diff --git a/webpack/webpack.config.base.ts b/webpack/webpack.config.base.ts index feed370..31f0314 100644 --- a/webpack/webpack.config.base.ts +++ b/webpack/webpack.config.base.ts @@ -1,14 +1,14 @@ // #region shared with https://github.com/paranext/paranext-core/blob/main/extensions/webpack/webpack.config.base.ts -import path from "path"; -import TsconfigPathsPlugin from "tsconfig-paths-webpack-plugin"; -import webpack from "webpack"; +import path from 'path'; +import TsconfigPathsPlugin from 'tsconfig-paths-webpack-plugin'; +import webpack from 'webpack'; -const isDev = process.env.NODE_ENV !== "production"; +const isDev = process.env.NODE_ENV !== 'production'; const shouldGenerateSourceMaps = isDev || process.env.DEBUG_PROD; /** The base directory from which webpack should operate (should be the root repo folder) */ -export const rootDir = path.resolve(__dirname, ".."); +export const rootDir = path.resolve(__dirname, '..'); /** * The module format of library we want webpack to use for externals and create for our extensions diff --git a/webpack/webpack.config.web-view.ts b/webpack/webpack.config.web-view.ts index 58c49e0..59122e6 100644 --- a/webpack/webpack.config.web-view.ts +++ b/webpack/webpack.config.web-view.ts @@ -1,16 +1,16 @@ // #region shared with https://github.com/paranext/paranext-core/blob/main/extensions/webpack/webpack.config.web-view.ts -import webpack from "webpack"; -import merge from "webpack-merge"; -import configBase, { rootDir } from "./webpack.config.base"; -import { getWebViewEntries } from "./webpack.util"; +import webpack from 'webpack'; +import merge from 'webpack-merge'; +import configBase, { rootDir } from './webpack.config.base'; +import { getWebViewEntries } from './webpack.util'; /** webpack configuration for building webViews */ const configWebView: webpack.Configuration = merge(configBase, { // Build for web since Paranext loads WebViews in browser https://webpack.js.org/concepts/targets/ - target: "web", + target: 'web', // configuration name so we can depend on it in main - name: "webView", + name: 'webView', // instructions to build each extension webview source file entry: getWebViewEntries, output: { From 2a708a6aebece72e4f6a1210875ecc8444749d89 Mon Sep 17 00:00:00 2001 From: tjcouch-sil Date: Wed, 26 Jul 2023 08:42:22 -0500 Subject: [PATCH 53/61] Changed extension dependencies to peerDependencies since the only ingestor Paranext must have them installed to be able to provide them --- package-lock.json | 30 +++++++++++++++++++++--------- package.json | 6 +++--- webpack/webpack.config.base.ts | 2 +- 3 files changed, 25 insertions(+), 13 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0ab35e2..6070782 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,11 +8,6 @@ "name": "paranext-extension-template", "version": "0.0.1", "license": "MIT", - "dependencies": { - "@sillsdev/scripture": "^1.4.0", - "react": "^18.2.0", - "react-dom": "^18.2.0" - }, "devDependencies": { "@types/node": "^18.17.0", "@types/react": "^18.2.15", @@ -37,6 +32,11 @@ "webpack-cli": "^5.1.4", "webpack-merge": "^5.9.0", "zip-build": "^1.8.0" + }, + "peerDependencies": { + "@sillsdev/scripture": "^1.4.0", + "react": ">=18.2.0", + "react-dom": ">=18.2.0" } }, "../paranext-core/lib/papi-components": { @@ -813,7 +813,8 @@ "node_modules/@sillsdev/scripture": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/@sillsdev/scripture/-/scripture-1.4.0.tgz", - "integrity": "sha512-Fwf1+OWfYYS5HmxbBev70dzZHL1a/B/+9c+zxcI76QZaeUEy7hG3BBL/hi1aaWuHC419XX+RaASL6tFng9g7Qg==" + "integrity": "sha512-Fwf1+OWfYYS5HmxbBev70dzZHL1a/B/+9c+zxcI76QZaeUEy7hG3BBL/hi1aaWuHC419XX+RaASL6tFng9g7Qg==", + "peer": true }, "node_modules/@swc/core": { "version": "1.3.70", @@ -2593,7 +2594,8 @@ }, "node_modules/js-tokens": { "version": "4.0.0", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", @@ -2729,6 +2731,7 @@ "node_modules/loose-envify": { "version": "1.4.0", "license": "MIT", + "peer": true, "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, @@ -3189,6 +3192,7 @@ "node_modules/react": { "version": "18.2.0", "license": "MIT", + "peer": true, "dependencies": { "loose-envify": "^1.1.0" }, @@ -3199,6 +3203,7 @@ "node_modules/react-dom": { "version": "18.2.0", "license": "MIT", + "peer": true, "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.0" @@ -3461,6 +3466,7 @@ "node_modules/scheduler": { "version": "0.23.0", "license": "MIT", + "peer": true, "dependencies": { "loose-envify": "^1.1.0" } @@ -4391,7 +4397,8 @@ "@sillsdev/scripture": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/@sillsdev/scripture/-/scripture-1.4.0.tgz", - "integrity": "sha512-Fwf1+OWfYYS5HmxbBev70dzZHL1a/B/+9c+zxcI76QZaeUEy7hG3BBL/hi1aaWuHC419XX+RaASL6tFng9g7Qg==" + "integrity": "sha512-Fwf1+OWfYYS5HmxbBev70dzZHL1a/B/+9c+zxcI76QZaeUEy7hG3BBL/hi1aaWuHC419XX+RaASL6tFng9g7Qg==", + "peer": true }, "@swc/core": { "version": "1.3.70", @@ -5516,7 +5523,8 @@ } }, "js-tokens": { - "version": "4.0.0" + "version": "4.0.0", + "peer": true }, "json-parse-even-better-errors": { "version": "2.3.1", @@ -5612,6 +5620,7 @@ }, "loose-envify": { "version": "1.4.0", + "peer": true, "requires": { "js-tokens": "^3.0.0 || ^4.0.0" } @@ -6179,12 +6188,14 @@ }, "react": { "version": "18.2.0", + "peer": true, "requires": { "loose-envify": "^1.1.0" } }, "react-dom": { "version": "18.2.0", + "peer": true, "requires": { "loose-envify": "^1.1.0", "scheduler": "^0.23.0" @@ -6325,6 +6336,7 @@ }, "scheduler": { "version": "0.23.0", + "peer": true, "requires": { "loose-envify": "^1.1.0" } diff --git a/package.json b/package.json index 5c61a0e..8e498ba 100644 --- a/package.json +++ b/package.json @@ -21,10 +21,10 @@ "start:production": "cross-env MAIN_ARGS=\"--extensions $INIT_CWD/dist\" concurrently \"npm:watch:production\" \"npm:start:core\"", "lint": "tsc" }, - "dependencies": { + "peerDependencies": { "@sillsdev/scripture": "^1.4.0", - "react": "^18.2.0", - "react-dom": "^18.2.0" + "react": ">=18.2.0", + "react-dom": ">=18.2.0" }, "devDependencies": { "@types/node": "^18.17.0", diff --git a/webpack/webpack.config.base.ts b/webpack/webpack.config.base.ts index 31f0314..b501e71 100644 --- a/webpack/webpack.config.base.ts +++ b/webpack/webpack.config.base.ts @@ -13,7 +13,7 @@ export const rootDir = path.resolve(__dirname, '..'); /** * The module format of library we want webpack to use for externals and create for our extensions * - * @see webpack.Configuration['externalsTye'] for info about external import format + * @see webpack.Configuration['externalsType'] for info about external import format * @see webpack.LibraryOptions['type'] for info about library format */ // commonjs-static formats the code to export everything on module.exports. so it works From a6364cf85f7a3d9a3a80cb39b37d0d82190d670a Mon Sep 17 00:00:00 2001 From: tjcouch-sil Date: Thu, 27 Jul 2023 09:17:04 -0500 Subject: [PATCH 54/61] Removed data url support since paranext does not support them --- src/webpack-env.d.ts | 118 --------------------------------- webpack/webpack.config.base.ts | 22 ------ 2 files changed, 140 deletions(-) diff --git a/src/webpack-env.d.ts b/src/webpack-env.d.ts index cf76dd1..f1f6b71 100644 --- a/src/webpack-env.d.ts +++ b/src/webpack-env.d.ts @@ -54,122 +54,4 @@ declare module '*.css' { // #endregion -// #region images - -/** - * Load images as data uris - * - * Note: it is advised to use the `papi-extension:` protocol to load assets as data uris are - * not currently supported in Platform.Bible - */ -declare module '*.png' { - const content: string; - export default content; -} - -/** - * Load images as data uris - * - * Note: it is advised to use the `papi-extension:` protocol to load assets as data uris are - * not currently supported in Platform.Bible - */ -declare module '*.svg' { - const content: string; - export default content; -} - -/** - * Load images as data uris - * - * Note: it is advised to use the `papi-extension:` protocol to load assets as data uris are - * not currently supported in Platform.Bible - */ -declare module '*.jpg' { - const content: string; - export default content; -} - -/** - * Load images as data uris - * - * Note: it is advised to use the `papi-extension:` protocol to load assets as data uris are - * not currently supported in Platform.Bible - */ -declare module '*.jpeg' { - const content: string; - export default content; -} - -/** - * Load images as data uris - * - * Note: it is advised to use the `papi-extension:` protocol to load assets as data uris are - * not currently supported in Platform.Bible - */ -declare module '*.gif' { - const content: string; - export default content; -} - -// #endregion - -// #region fonts - -/** - * Load fonts as data uris - * - * Note: it is advised to use the `papi-extension:` protocol to load assets as data uris are - * not currently supported in Platform.Bible - */ -declare module '*.woff' { - const content: string; - export default content; -} - -/** - * Load fonts as data uris - * - * Note: it is advised to use the `papi-extension:` protocol to load assets as data uris are - * not currently supported in Platform.Bible - */ -declare module '*.woff2' { - const content: string; - export default content; -} - -/** - * Load fonts as data uris - * - * Note: it is advised to use the `papi-extension:` protocol to load assets as data uris are - * not currently supported in Platform.Bible - */ -declare module '*.eot' { - const content: string; - export default content; -} - -/** - * Load fonts as data uris - * - * Note: it is advised to use the `papi-extension:` protocol to load assets as data uris are - * not currently supported in Platform.Bible - */ -declare module '*.ttf' { - const content: string; - export default content; -} - -/** - * Load fonts as data uris - * - * Note: it is advised to use the `papi-extension:` protocol to load assets as data uris are - * not currently supported in Platform.Bible - */ -declare module '*.otf' { - const content: string; - export default content; -} - -// #endregion - // #endregion diff --git a/webpack/webpack.config.base.ts b/webpack/webpack.config.base.ts index b501e71..1e1e6ed 100644 --- a/webpack/webpack.config.base.ts +++ b/webpack/webpack.config.base.ts @@ -101,28 +101,6 @@ const configBase: webpack.Configuration = { 'sass-loader', ], }, - /** - * Load images as data uris - * - * Note: it is advised to use the `papi-extension:` protocol to load assets as data uris are - * not currently supported in Platform.Bible - */ - // https://webpack.js.org/guides/asset-management/#loading-images - { - test: /\.(png|svg|jpg|jpeg|gif)$/i, - type: 'asset/inline', - }, - /** - * Load fonts as data uris - * - * Note: it is advised to use the `papi-extension:` protocol to load assets as data uris are - * not currently supported in Platform.Bible - */ - // https://webpack.js.org/guides/asset-management/#loading-fonts - { - test: /\.(woff|woff2|eot|ttf|otf)$/i, - type: 'asset/inline', - }, /** * Import files with no transformation as strings with "./file?raw" */ From be3024a2e1aff4fa81eece727ebaa71eb8d27125 Mon Sep 17 00:00:00 2001 From: Matt Lyons Date: Mon, 31 Jul 2023 09:16:26 -0500 Subject: [PATCH 55/61] Apply updates based on changes to core --- .vscode/launch.json | 2 +- src/main.ts | 59 +++++++++++++++++---------------------------- 2 files changed, 23 insertions(+), 38 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 23603d6..05299f2 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -37,7 +37,7 @@ "runtimeArgs": ["run", "build"] }, { - "name": "Debug Paranext Core with Extension", + "name": "Debug Platform with Extension", "type": "node", "request": "launch", "runtimeExecutable": "npm", diff --git a/src/main.ts b/src/main.ts index ac5df06..84b04b5 100644 --- a/src/main.ts +++ b/src/main.ts @@ -17,8 +17,6 @@ import type { } from 'paranext-extension-template'; import type { DataProviderUpdateInstructions } from 'shared/models/data-provider.model'; import { ExecutionActivationContext } from 'extension-host/extension-types/extension-activation-context.model'; -import { ExecutionToken } from 'node/models/execution-token.model'; -import { UnsubscriberAsync } from 'shared/utils/papi-util'; import type { IWebViewProvider } from 'shared/models/web-view-provider.model'; import type { UsfmDataProvider } from 'usfm-data-provider'; @@ -342,9 +340,8 @@ const reactWebViewProvider2: IWebViewProvider = { export async function activate(context: ExecutionActivationContext) { logger.info('Extension template is activating!'); - const token: ExecutionToken = context.executionToken; const warning = await papi.storage.readTextFileFromInstallDirectory( - token, + context.executionToken, 'assets/heresy-warning.txt', ); const engine = new QuickVerseDataProviderEngine(warning.trim()); @@ -352,7 +349,7 @@ export async function activate(context: ExecutionActivationContext) { let storedHeresyCount: number = 0; try { // If a user has never been a heretic, there is nothing to read - const loadedData = await papi.storage.readUserData(token, 'heresy-count'); + const loadedData = await papi.storage.readUserData(context.executionToken, 'heresy-count'); if (loadedData) storedHeresyCount = Number(loadedData); } catch (error) { logger.debug(error); @@ -379,25 +376,23 @@ export async function activate(context: ExecutionActivationContext) { reactWebViewProvider2, ); - let doStuffCount = 0; // Emitter to tell subscribers how many times we have done stuff const onDoStuffEmitter = papi.network.createNetworkEventEmitter( 'extensionTemplate.doStuff', ); - const unsubPromises = [ - papi.commands.registerCommand('extensionTemplate.doStuff', (message: string) => { - doStuffCount += 1; - // Inform subscribers of the update - onDoStuffEmitter.emit({ count: doStuffCount }); + let doStuffCount = 0; + const doStuffCommandPromise = papi.commands.registerCommand('extensionTemplate.doStuff', (message: string) => { + doStuffCount += 1; + // Inform subscribers of the update + onDoStuffEmitter.emit({ count: doStuffCount }); - // Respond to the sender of the command with the news - return { - response: `The template did stuff ${doStuffCount} times! ${message}`, - occurrence: doStuffCount, - }; - }), - ]; + // Respond to the sender of the command with the news + return { + response: `The template did stuff ${doStuffCount} times! ${message}`, + occurrence: doStuffCount, + }; + }); // Create WebViews or get an existing WebView if one already exists for this type // Note: here, we are using `existingId: '?'` to indicate we do not want to create a new WebView @@ -409,27 +404,17 @@ export async function activate(context: ExecutionActivationContext) { papi.webViews.getWebView(reactWebViewType, undefined, { existingId: '?' }); papi.webViews.getWebView(reactWebViewType2, undefined, { existingId: '?' }); - // For now, let's just make things easy and await the data provider promise at the end so we don't - // hold everything else up - const quickVerseDataProvider = await quickVerseDataProviderPromise; - const htmlWebViewProviderResolved = await htmlWebViewProviderPromise; - const reactWebViewProviderResolved = await reactWebViewProviderPromise; - const reactWebViewProvider2Resolved = await reactWebViewProvider2Promise; - - const combinedUnsubscriber: UnsubscriberAsync = papi.util.aggregateUnsubscriberAsyncs( - (await Promise.all(unsubPromises)).concat([ - quickVerseDataProvider.dispose, - htmlWebViewProviderResolved.dispose, - reactWebViewProviderResolved.dispose, - reactWebViewProvider2Resolved.dispose, - () => { - onDoStuffEmitter.dispose(); - return Promise.resolve(true); - }, - ]), + // Await the data provider promise at the end so we don't hold everything else up + context.registrations.add( + await quickVerseDataProviderPromise, + await htmlWebViewProviderPromise, + await reactWebViewProviderPromise, + await reactWebViewProvider2Promise, + onDoStuffEmitter, + await doStuffCommandPromise ); + logger.info('Extension template is finished activating!'); - return combinedUnsubscriber; } export async function deactivate() { From bfc8b14dc2b54052085a0eadc4de32ee5df7f515 Mon Sep 17 00:00:00 2001 From: Ira Hopkinson Date: Wed, 2 Aug 2023 01:15:17 +1200 Subject: [PATCH 56/61] Debug production (#34) --- .vscode/launch.json | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/.vscode/launch.json b/.vscode/launch.json index 05299f2..fb0f3a0 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -52,6 +52,21 @@ "group": "", "order": 1 } + }, + { + "name": "Attach to Platform app", + "type": "node", + "request": "attach", + "port": 5858, + "timeout": 15000 + }, + { + "name": "Attach to Renderer", + "type": "chrome", + "request": "attach", + "port": 9223, + "webRoot": "${workspaceFolder}", + "timeout": 15000 } ] } From 4e81002406d4a18c7ff39bd40fe3ded84fac3d8a Mon Sep 17 00:00:00 2001 From: tombogle Date: Tue, 1 Aug 2023 10:16:14 -0400 Subject: [PATCH 57/61] [WIP] Merge remote-tracking branch 'template/main' into merge-webpack-changes-from-template # Conflicts: # .gitignore # .vscode/launch.json # .vscode/settings.json # README.md # package-lock.json # package.json # public/manifest.json # tsconfig.json --- .gitignore | 5 +- .vscode/launch.json | 92 +- .vscode/settings.json | 32 +- README.md | 92 +- lib/vite-env.d.ts | 1 - package-lock.json | 7135 +++++++++-------- package.json | 49 +- public/assets/heresy-warning.txt | 1 + public/manifest.json | 2 +- {lib => src}/main.ts | 5 +- {lib => src}/sneeze-board.data.json | 0 {lib => src}/sneeze-board.web-view.scss | 0 {lib => src}/sneeze-board.web-view.tsx | 2 +- .../paranext-extension-sneeze-board.d.ts | 0 src/webpack-env.d.ts | 57 + tsconfig.json | 45 +- tsconfig.node.json | 1 - vite/vite-web-view.config.ts | 98 - vite/vite.config.ts | 84 - vite/vite.util.ts | 81 - webpack.config.ts | 15 + webpack/web-view-resolve-webpack-plugin.ts | 114 + webpack/webpack.config.base.ts | 128 + webpack/webpack.config.main.ts | 63 + webpack/webpack.config.web-view.ts | 24 + webpack/webpack.util.ts | 82 + 26 files changed, 4284 insertions(+), 3924 deletions(-) delete mode 100644 lib/vite-env.d.ts create mode 100644 public/assets/heresy-warning.txt rename {lib => src}/main.ts (97%) rename {lib => src}/sneeze-board.data.json (100%) rename {lib => src}/sneeze-board.web-view.scss (100%) rename {lib => src}/sneeze-board.web-view.tsx (98%) rename {public => src/types}/paranext-extension-sneeze-board.d.ts (100%) create mode 100644 src/webpack-env.d.ts delete mode 100644 vite/vite-web-view.config.ts delete mode 100644 vite/vite.config.ts delete mode 100644 vite/vite.util.ts create mode 100644 webpack.config.ts create mode 100644 webpack/web-view-resolve-webpack-plugin.ts create mode 100644 webpack/webpack.config.base.ts create mode 100644 webpack/webpack.config.main.ts create mode 100644 webpack/webpack.config.web-view.ts create mode 100644 webpack/webpack.util.ts diff --git a/.gitignore b/.gitignore index efec5b4..6a11c5d 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ lerna-debug.log* node_modules dist +release dist-ssr *.local @@ -21,5 +22,5 @@ dist-ssr *.sln *.sw? -# Vite-built temp WebView files -temp-vite +# Temporary intermediate build files +temp-build diff --git a/.vscode/launch.json b/.vscode/launch.json index 5f94d96..23603d6 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -1,41 +1,57 @@ { - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - { - "name": "Watch and Build Extension", - "type": "node", - "request": "launch", - "runtimeExecutable": "npm", - "skipFiles": ["/**"], - "runtimeArgs": ["run", "start:vite"] + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Watch and Build Extension", + "type": "node", + "request": "launch", + "runtimeExecutable": "npm", + "skipFiles": ["/**"], + "runtimeArgs": ["run", "watch"] + }, + { + "name": "Build WebViews", + "type": "node", + "request": "launch", + "runtimeExecutable": "npm", + "skipFiles": ["/**"], + "runtimeArgs": ["run", "build:web-view"] + }, + { + "name": "Build Main", + "type": "node", + "request": "launch", + "runtimeExecutable": "npm", + "skipFiles": ["/**"], + "runtimeArgs": ["run", "build:main"] + }, + { + "name": "Build Extension", + "type": "node", + "request": "launch", + "runtimeExecutable": "npm", + "skipFiles": ["/**"], + "runtimeArgs": ["run", "build"] + }, + { + "name": "Debug Paranext Core with Extension", + "type": "node", + "request": "launch", + "runtimeExecutable": "npm", + "runtimeArgs": ["run", "start"], + "skipFiles": ["/**"], + "env": { + "MAIN_ARGS": "--inspect=5858 --remote-debugging-port=9223", + "IN_VSCODE": "true" }, - { - "name": "Build Extension", - "type": "node", - "request": "launch", - "runtimeExecutable": "npm", - "skipFiles": ["/**"], - "runtimeArgs": ["run", "build:vite"] - }, - { - "name": "Debug Paranext Core with Extension", - "type": "node", - "request": "launch", - "runtimeExecutable": "npm", - "runtimeArgs": ["run", "start"], - "skipFiles": ["/**"], - "env": { - "MAIN_ARGS": "--inspect=5858 --remote-debugging-port=9223", - "IN_VSCODE": "true" - }, - "presentation": { - "hidden": false, - "group": "", - "order": 1 - } + "presentation": { + "hidden": false, + "group": "", + "order": 1 } - ] -} \ No newline at end of file + } + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json index e5020b3..1414134 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -3,6 +3,36 @@ "editor.wordWrapColumn": 100, "files.eol": "\n", + "cSpell.words": [ + "asyncs", + "endregion", + "papi", + "paranext", + "sillsdev", + "unsub", + "unsubscriber", + "usfm" + ], - "cSpell.words": ["asyncs", "papi", "paranext", "unsub", "unsubscriber", "unsubscribers"] + "todohighlight.keywords": [ + { + "text": "WARNING:", + "isWholeLine": true, + "color": "#FF0000", + "backgroundColor": "none", + "overviewRulerColor": "#FF000000" + }, + { + "text": "#region", + "color": "#6cf5ff", + "backgroundColor": "none", + "overviewRulerColor": "#6cf5ff60" + }, + { + "text": "#endregion", + "color": "#6cf5ff", + "backgroundColor": "none", + "overviewRulerColor": "#6cf5ff60" + } + ] } diff --git a/README.md b/README.md index 0444053..161f24b 100644 --- a/README.md +++ b/README.md @@ -3,16 +3,19 @@ Example Paranext extension to display a Sneeze Board ## Summary -This is a sample Paranext extension project: Sneeze Board to track team members' work-related sneezes. - - - `lib` contains the source code for the extension - - `lib/main.ts` is the main entry file for the Sneeze Board extension - - `sneeze-board.web-view.tsx` file defines a React WebView that Paranext displays - - `public` contains static files that are transferred to the build folder - - `public/manifest.json` is the manifest file that defines the extension - - `public/package.json` defines the npm package for this extension and is required for Paranext to use it appropriately - - `public/paranext-extension-sneeze-board.d.ts` is this extension's types file that other extensions can use - - `dist` is a generated folder containing the built extension files +This is a sample Platform.Bible extension project: Sneeze Board to track team members' work-related sneezes. + +- `package.json` contains information about this extension npm package. It is required for Platform.Bible to use the extension properly. It is copied into the build folder +- `src` contains the source code for the extension + - `src/main.ts` is the main entry file for the Sneeze Board extension + - `src/types/sneeze-board.d.ts` is this extension's types file that defines how other extensions can use this extension through the `papi`. It is copied into the build folder + - `sneeze-board.web-view.tsx` file defines a React WebView that Platform.Bible displays +- `public` contains static files that are copied into the build folder + - `public/manifest.json` is the manifest file that defines the Sneeze Board extension and important properties for Platform.Bible + - `public/package.json` defines the npm package for this extension and is required for Platform.Bible to use it appropriately + - `public/assets` contains asset files the extension and its WebViews can retrieve using the `papi-extension:` protocol +- `dist` is a generated folder containing the built extension files +- `release` is a generated folder containing a zip of the built extension files ## To install @@ -35,41 +38,64 @@ To run Paranext with your extension: `npm start` -Note: The built extension will be in the `dist` folder. In order for Paranext to run your extension, you must provide the directory to your built extension to Paranext via a command-line argument. This command-line argument is already provided in this `package.json`'s `start` script. If you want to start Paranext and use your extension any other way, you must provide this command-line argument or put the `dist` folder into Paranext's `extensions` folder. +Note: The built extension will be in the `dist` folder. In order for Platform.Bible to run your extension, you must provide the directory to your built extension to Platform.Bible via a command-line argument. This command-line argument is already provided in this `package.json`'s `start` script. If you want to start Platform.Bible and use the Sneeze Board extension any other way, you must provide this command-line argument or put the `dist` folder into Platform.Bible's `extensions` folder. ### Building your extension independently -To watch extension files (in `lib`) for changes: +To watch extension files (in `src`) for changes: + +`npm run watch` + +To build the Sneeze Board extension once: + +`npm run build` + +## To package for distribution + +To package the Sneeze Board extension into a zip file for distribution: + +`npm run package` + +## Special features of the template -`npm run start:vite` +The paranext-extension-template has special features and specific configuration to make building an extension for Platform.Bible easier. Following are a few important notes: -To build the extension once: +### React WebView files - `.web-view.tsx` -`npm run build:vite` +Platform.Bible WebViews must be treated differently than other code, so the template makes doing that simpler: -## Vite Build Explanation +- WebView code must be bundled and can only import specific packages provided by Platform.Bible (see `externals` in `webpack.config.base.ts`), so this template bundles React WebViews before bundling the main extension file to support this requirement. The template discovers and bundles files that end with `.web-view.tsx` in this way. + - Note: while watching for changes, if you add a new `.web-view.tsx` file, you must either restart webpack or make a nominal change and save in an existing `.web-view.tsx` file for webpack to discover and bundle this new file. +- WebView code and styles must be provided to the `papi` as strings, so you can import WebView files with [`?inline`](#special-imports) after the file path to import the file as a string. -This extension sneeze-board is built by Vite in two steps: a WebView transpilation step and a packaging step: +### Special imports -## Build 1: TypeScript WebView transpilation +- Adding `?inline` to the end of a file import causes that file to be imported as a string after being transformed by webpack loaders but before bundling dependencies (except if that file is a React WebView file, in which case dependencies will be bundled). The contents of the file will be on the file's default export. + - Ex: `import myFile from './file-path?inline` +- Adding `?raw` to the end of a file import treats a file the same way as `?inline` except that it will be imported directly without being transformed by webpack. -Vite prepares TypeScript WebViews for use and outputs them into `temp-vite` folders adjacent to the WebView files: -- Formats WebViews to match how they should look to work in Paranext +### Misc features + +- Platform.Bible extension code must be bundled all together in one file, so webpack bundles all the code together into one main extension file. +- Platform.Bible extensions can interact with other extensions, but they cannot import and export like in a normal Node environment. Instead, they interact through the `papi`. As such, the `src/types` folder contains this extension's declarations file that tells other extensions how to interact with it through the `papi`. + +### Two-step webpack build + +This extension template is built by webpack (`webpack.config.ts`) in two steps: a WebView bundling step and a main bundling step: + +#### Build 1: TypeScript WebView bundling + +Webpack (`./webpack/webpack.config.web-view.ts`) prepares TypeScript WebViews for use and outputs them into temporary build folders adjacent to the WebView files: +- Formats WebViews to match how they should look to work in Platform.Bible - Transpiles React/TypeScript WebViews into JavaScript -- Packages dependencies into the WebViews +- Bundles dependencies into the WebViews - Embeds Sourcemaps into the WebViews inline -## Built 2: Packaging +#### Build 2: Main and final bundling -Vite packages the extension together into the `dist` folder: +Webpack (`./webpack/webpack.config.main.ts`) prepares the main extension file and bundles the extension together into the `dist` folder: - Transpiles the main TypeScript file and its imported modules into JavaScript -- Injects the WebViews into the main file -- Packages dependencies into the main file -- Generates sourcemaps for the file -- Packages everything up into an extension folder in `dist` - -Note: When performing the second build step, the following line may occur in your console. Please feel free to ignore it as it is a false positive. It is likely showing because WebViews are embedded in the entry file: - -```bash -transforming (1) lib\main.ts[plugin:ImportManager] It seems like there are multiple imports of module 'react'. You should examine that. -``` +- Injects the bundled WebViews into the main file +- Bundles dependencies into the main file +- Embeds Sourcemaps into the file inline +- Packages everything up into an extension folder `dist` diff --git a/lib/vite-env.d.ts b/lib/vite-env.d.ts deleted file mode 100644 index 11f02fe..0000000 --- a/lib/vite-env.d.ts +++ /dev/null @@ -1 +0,0 @@ -/// diff --git a/package-lock.json b/package-lock.json index 787cee5..f6d2f26 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,40 +1,51 @@ { "name": "paranext-extension-sneeze-board", "version": "0.0.1", - "lockfileVersion": 2, + "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "paranext-extension-sneeze-board", "version": "0.0.1", - "dependencies": { - "papi-components": "file:../paranext-core/lib/papi-components", - "react": "^18.2.0", - "react-dom": "^18.2.0" - }, + "license": "MIT", "devDependencies": { "@types/node": "^18.17.0", "@types/react": "^18.2.15", "@types/react-dom": "^18.2.7", - "@vitejs/plugin-react": "^4.0.3", + "@types/webpack": "^5.28.1", "concurrently": "^8.2.0", + "copy-webpack-plugin": "^11.0.0", "cross-env": "^7.0.3", + "css-loader": "^6.8.1", "escape-string-regexp": "^5.0.0", "glob": "^10.3.3", + "papi-components": "file:../paranext-core/lib/papi-components", "papi-dts": "file:../paranext-core/lib/papi-dts", - "patch-package": "^7.0.2", - "rollup-plugin-import-manager": "^0.6.4", - "rollup-plugin-string": "^3.0.0", "sass": "^1.64.1", + "sass-loader": "^13.3.2", + "swc-loader": "^0.2.3", + "ts-node": "^10.9.1", + "tsconfig-paths": "^4.2.0", + "tsconfig-paths-webpack-plugin": "^4.0.1", "typescript": "^5.1.6", - "vite": "^4.4.6" + "webpack": "^5.88.1", + "webpack-cli": "^5.1.4", + "webpack-merge": "^5.9.0", + "zip-build": "^1.8.0" + }, + "peerDependencies": { + "@sillsdev/scripture": "^1.4.0", + "react": ">=18.2.0", + "react-dom": ">=18.2.0" } }, "../paranext-core/lib/papi-components": { "version": "0.0.1", + "dev": true, "hasInstallScript": true, "license": "MIT", "devDependencies": { + "@mui/icons-material": "^5.13.7", "@senojs/rollup-plugin-style-inject": "^0.2.3", "@types/react": "^18.2.15", "@types/react-dom": "^18.2.7", @@ -52,7 +63,7 @@ "ts-node": "^10.9.1", "tslib": "^2.6.0", "typescript": "^5.1.6", - "vite": "^4.4.5" + "vite": "^4.4.6" }, "peerDependencies": { "@emotion/react": ">=11.11.1", @@ -73,717 +84,526 @@ "typescript": "^5.1.6" } }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "../paranext-core/lib/papi-dts/node_modules/@isaacs/cliui": { + "version": "8.0.2", "dev": true, + "license": "ISC", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" }, "engines": { - "node": ">=6.0.0" + "node": ">=12" } }, - "node_modules/@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "../paranext-core/lib/papi-dts/node_modules/@pkgjs/parseargs": { + "version": "0.11.0", "dev": true, - "dependencies": { - "@babel/highlight": "^7.22.5" - }, + "license": "MIT", + "optional": true, "engines": { - "node": ">=6.9.0" + "node": ">=14" } }, - "node_modules/@babel/compat-data": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", - "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", + "../paranext-core/lib/papi-dts/node_modules/ansi-regex": { + "version": "6.0.1", "dev": true, + "license": "MIT", "engines": { - "node": ">=6.9.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/@babel/core": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.9.tgz", - "integrity": "sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.9", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helpers": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.8", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.1" - }, + "../paranext-core/lib/papi-dts/node_modules/ansi-styles": { + "version": "6.2.1", + "dev": true, + "license": "MIT", "engines": { - "node": ">=6.9.0" + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@babel/generator": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz", - "integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==", + "../paranext-core/lib/papi-dts/node_modules/balanced-match": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "../paranext-core/lib/papi-dts/node_modules/brace-expansion": { + "version": "2.0.1", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" + "balanced-match": "^1.0.0" } }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz", - "integrity": "sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==", + "../paranext-core/lib/papi-dts/node_modules/color-convert": { + "version": "2.0.1", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.9", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" + "color-name": "~1.1.4" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "node": ">=7.0.0" } }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "../paranext-core/lib/papi-dts/node_modules/color-name": { + "version": "1.1.4", "dev": true, - "engines": { - "node": ">=6.9.0" - } + "license": "MIT" }, - "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "../paranext-core/lib/papi-dts/node_modules/cross-spawn": { + "version": "7.0.3", "dev": true, + "license": "MIT", "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">=6.9.0" + "node": ">= 8" } }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "../paranext-core/lib/papi-dts/node_modules/eastasianwidth": { + "version": "0.2.0", "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, + "license": "MIT" + }, + "../paranext-core/lib/papi-dts/node_modules/emoji-regex": { + "version": "9.2.2", + "dev": true, + "license": "MIT" + }, + "../paranext-core/lib/papi-dts/node_modules/escape-string-regexp": { + "version": "5.0.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=6.9.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "../paranext-core/lib/papi-dts/node_modules/foreground-child": { + "version": "3.1.1", "dev": true, + "license": "ISC", "dependencies": { - "@babel/types": "^7.22.5" + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" }, "engines": { - "node": ">=6.9.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", - "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", + "../paranext-core/lib/papi-dts/node_modules/glob": { + "version": "10.3.3", "dev": true, + "license": "ISC", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.5" + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/cjs/src/bin.js" }, "engines": { - "node": ">=6.9.0" + "node": ">=16 || 14 >=14.17" }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "../paranext-core/lib/papi-dts/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", "dev": true, + "license": "MIT", "engines": { - "node": ">=6.9.0" + "node": ">=8" } }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "../paranext-core/lib/papi-dts/node_modules/isexe": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "../paranext-core/lib/papi-dts/node_modules/jackspeak": { + "version": "2.2.1", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "@babel/types": "^7.22.5" + "@isaacs/cliui": "^8.0.2" }, "engines": { - "node": ">=6.9.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "../paranext-core/lib/papi-dts/node_modules/lru-cache": { + "version": "10.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "14 || >=16.14" } }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "../paranext-core/lib/papi-dts/node_modules/minimatch": { + "version": "9.0.3", "dev": true, + "license": "ISC", "dependencies": { - "@babel/types": "^7.22.5" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=6.9.0" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "../paranext-core/lib/papi-dts/node_modules/minipass": { + "version": "7.0.2", "dev": true, + "license": "ISC", "engines": { - "node": ">=6.9.0" + "node": ">=16 || 14 >=14.17" } }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "../paranext-core/lib/papi-dts/node_modules/path-key": { + "version": "3.1.1", "dev": true, + "license": "MIT", "engines": { - "node": ">=6.9.0" + "node": ">=8" } }, - "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "../paranext-core/lib/papi-dts/node_modules/path-scurry": { + "version": "1.10.1", "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, "engines": { - "node": ">=6.9.0" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@babel/helpers": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz", - "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==", + "../paranext-core/lib/papi-dts/node_modules/rimraf": { + "version": "5.0.1", "dev": true, + "license": "ISC", "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.6", - "@babel/types": "^7.22.5" + "glob": "^10.2.5" + }, + "bin": { + "rimraf": "dist/cjs/src/bin.js" }, "engines": { - "node": ">=6.9.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "../paranext-core/lib/papi-dts/node_modules/shebang-command": { + "version": "2.0.0", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "shebang-regex": "^3.0.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=8" } }, - "node_modules/@babel/parser": { - "version": "7.22.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz", - "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==", + "../paranext-core/lib/papi-dts/node_modules/shebang-regex": { + "version": "3.0.0", "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, + "license": "MIT", "engines": { - "node": ">=6.0.0" + "node": ">=8" } }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.22.5.tgz", - "integrity": "sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==", + "../paranext-core/lib/papi-dts/node_modules/signal-exit": { + "version": "4.0.2", "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, + "license": "ISC", "engines": { - "node": ">=6.9.0" + "node": ">=14" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.22.5.tgz", - "integrity": "sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==", + "../paranext-core/lib/papi-dts/node_modules/string-width": { + "version": "5.1.2", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=6.9.0" + "node": ">=12" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@babel/runtime": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.5.tgz", - "integrity": "sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q==", + "../paranext-core/lib/papi-dts/node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", "dev": true, + "license": "MIT", "dependencies": { - "regenerator-runtime": "^0.13.11" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=6.9.0" + "node": ">=8" } }, - "node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "../paranext-core/lib/papi-dts/node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - }, + "license": "MIT", "engines": { - "node": ">=6.9.0" + "node": ">=8" } }, - "node_modules/@babel/traverse": { - "version": "7.22.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.8.tgz", - "integrity": "sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==", + "../paranext-core/lib/papi-dts/node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "dev": true, + "license": "MIT" + }, + "../paranext-core/lib/papi-dts/node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.7", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/types": "^7.22.5", - "debug": "^4.1.0", - "globals": "^11.1.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=6.9.0" + "node": ">=8" } }, - "node_modules/@babel/types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", - "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", + "../paranext-core/lib/papi-dts/node_modules/strip-ansi": { + "version": "7.1.0", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">=6.9.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/@esbuild/android-arm": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.16.tgz", - "integrity": "sha512-gCHjjQmA8L0soklKbLKA6pgsLk1byULuHe94lkZDzcO3/Ta+bbeewJioEn1Fr7kgy9NWNFy/C+MrBwC6I/WCug==", - "cpu": [ - "arm" - ], + "../paranext-core/lib/papi-dts/node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", "dev": true, - "optional": true, - "os": [ - "android" - ], + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/@esbuild/android-arm64": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.16.tgz", - "integrity": "sha512-wsCqSPqLz+6Ov+OM4EthU43DyYVVyfn15S4j1bJzylDpc1r1jZFFfJQNfDuT8SlgwuqpmpJXK4uPlHGw6ve7eA==", - "cpu": [ - "arm64" - ], + "../paranext-core/lib/papi-dts/node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", "dev": true, - "optional": true, - "os": [ - "android" - ], + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/@esbuild/android-x64": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.16.tgz", - "integrity": "sha512-ldsTXolyA3eTQ1//4DS+E15xl0H/3DTRJaRL0/0PgkqDsI0fV/FlOtD+h0u/AUJr+eOTlZv4aC9gvfppo3C4sw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.16.tgz", - "integrity": "sha512-aBxruWCII+OtluORR/KvisEw0ALuw/qDQWvkoosA+c/ngC/Kwk0lLaZ+B++LLS481/VdydB2u6tYpWxUfnLAIw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.16.tgz", - "integrity": "sha512-6w4Dbue280+rp3LnkgmriS1icOUZDyPuZo/9VsuMUTns7SYEiOaJ7Ca1cbhu9KVObAWfmdjUl4gwy9TIgiO5eA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.16.tgz", - "integrity": "sha512-x35fCebhe9s979DGKbVAwXUOcTmCIE32AIqB9CB1GralMIvxdnMLAw5CnID17ipEw9/3MvDsusj/cspYt2ZLNQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.16.tgz", - "integrity": "sha512-YM98f+PeNXF3GbxIJlUsj+McUWG1irguBHkszCIwfr3BXtXZsXo0vqybjUDFfu9a8Wr7uUD/YSmHib+EeGAFlg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.16.tgz", - "integrity": "sha512-b5ABb+5Ha2C9JkeZXV+b+OruR1tJ33ePmv9ZwMeETSEKlmu/WJ45XTTG+l6a2KDsQtJJ66qo/hbSGBtk0XVLHw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.16.tgz", - "integrity": "sha512-XIqhNUxJiuy+zsR77+H5Z2f7s4YRlriSJKtvx99nJuG5ATuJPjmZ9n0ANgnGlPCpXGSReFpgcJ7O3SMtzIFeiQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.16.tgz", - "integrity": "sha512-no+pfEpwnRvIyH+txbBAWtjxPU9grslmTBfsmDndj7bnBmr55rOo/PfQmRfz7Qg9isswt1FP5hBbWb23fRWnow==", - "cpu": [ - "ia32" - ], + "../paranext-core/lib/papi-dts/node_modules/typescript": { + "version": "5.1.6", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, "engines": { - "node": ">=12" + "node": ">=14.17" } }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.16.tgz", - "integrity": "sha512-Zbnczs9ZXjmo0oZSS0zbNlJbcwKXa/fcNhYQjahDs4Xg18UumpXG/lwM2lcSvHS3mTrRyCYZvJbmzYc4laRI1g==", - "cpu": [ - "loong64" - ], + "../paranext-core/lib/papi-dts/node_modules/which": { + "version": "2.0.2", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, "engines": { - "node": ">=12" + "node": ">= 8" } }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.16.tgz", - "integrity": "sha512-YMF7hih1HVR/hQVa/ot4UVffc5ZlrzEb3k2ip0nZr1w6fnYypll9td2qcoMLvd3o8j3y6EbJM3MyIcXIVzXvQQ==", - "cpu": [ - "mips64el" - ], + "../paranext-core/lib/papi-dts/node_modules/wrap-ansi": { + "version": "8.1.0", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, "engines": { "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.16.tgz", - "integrity": "sha512-Wkz++LZ29lDwUyTSEnzDaaP5OveOgTU69q9IyIw9WqLRxM4BjTBjz9un4G6TOvehWpf/J3gYVFN96TjGHrbcNQ==", - "cpu": [ - "ppc64" - ], + "../paranext-core/lib/papi-dts/node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, "engines": { - "node": ">=12" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.16.tgz", - "integrity": "sha512-LFMKZ30tk78/mUv1ygvIP+568bwf4oN6reG/uczXnz6SvFn4e2QUFpUpZY9iSJT6Qpgstrhef/nMykIXZtZWGQ==", - "cpu": [ - "riscv64" - ], + "../paranext-core/lib/papi-dts/node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.16.tgz", - "integrity": "sha512-3ZC0BgyYHYKfZo3AV2/66TD/I9tlSBaW7eWTEIkrQQKfJIifKMMttXl9FrAg+UT0SGYsCRLI35Gwdmm96vlOjg==", - "cpu": [ - "s390x" - ], + "../paranext-core/lib/papi-dts/node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=12" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@esbuild/linux-x64": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.16.tgz", - "integrity": "sha512-xu86B3647DihHJHv/wx3NCz2Dg1gjQ8bbf9cVYZzWKY+gsvxYmn/lnVlqDRazObc3UMwoHpUhNYaZset4X8IPA==", - "cpu": [ - "x64" - ], + "../paranext-core/lib/papi-dts/node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } + "license": "MIT" }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.16.tgz", - "integrity": "sha512-uVAgpimx9Ffw3xowtg/7qQPwHFx94yCje+DoBx+LNm2ePDpQXHrzE+Sb0Si2VBObYz+LcRps15cq+95YM7gkUw==", - "cpu": [ - "x64" - ], + "../paranext-core/lib/papi-dts/node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", "dev": true, - "optional": true, - "os": [ - "netbsd" - ], + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.16.tgz", - "integrity": "sha512-6OjCQM9wf7z8/MBi6BOWaTL2AS/SZudsZtBziXMtNI8r/U41AxS9x7jn0ATOwVy08OotwkPqGRMkpPR2wcTJXA==", - "cpu": [ - "x64" - ], + "../paranext-core/lib/papi-dts/node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", "dev": true, - "optional": true, - "os": [ - "openbsd" - ], + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.16.tgz", - "integrity": "sha512-ZoNkruFYJp9d1LbUYCh8awgQDvB9uOMZqlQ+gGEZR7v6C+N6u7vPr86c+Chih8niBR81Q/bHOSKGBK3brJyvkQ==", - "cpu": [ - "x64" - ], + "node_modules/@babel/runtime": { + "version": "7.21.5", "dev": true, - "optional": true, - "os": [ - "sunos" - ], + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.13.11" + }, "engines": { - "node": ">=12" + "node": ">=6.9.0" } }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.16.tgz", - "integrity": "sha512-+j4anzQ9hrs+iqO+/wa8UE6TVkKua1pXUb0XWFOx0FiAj6R9INJ+WE//1/Xo6FG1vB5EpH3ko+XcgwiDXTxcdw==", - "cpu": [ - "arm64" - ], + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, - "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, "engines": { "node": ">=12" } }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.16.tgz", - "integrity": "sha512-5PFPmq3sSKTp9cT9dzvI67WNfRZGvEVctcZa1KGjDDu4n3H8k59Inbk0du1fz0KrAbKKNpJbdFXQMDUz7BG4rQ==", - "cpu": [ - "ia32" - ], + "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/@esbuild/win32-x64": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.16.tgz", - "integrity": "sha512-sCIVrrtcWN5Ua7jYXNG1xD199IalrbfV2+0k/2Zf2OyV2FtnQnMgdzgpRAbi4AWlKJj1jkX+M+fEGPQj6BQB4w==", - "cpu": [ - "x64" - ], + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", "dev": true, - "optional": true, - "os": [ - "win32" - ], "engines": { - "node": ">=12" + "node": ">=10.0.0" } }, "node_modules/@isaacs/cliui": { "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -798,9 +618,8 @@ }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -810,9 +629,8 @@ }, "node_modules/@isaacs/cliui/node_modules/ansi-styles": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -822,15 +640,13 @@ }, "node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, + "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -845,9 +661,8 @@ }, "node_modules/@isaacs/cliui/node_modules/strip-ansi": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -860,9 +675,8 @@ }, "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -877,9 +691,8 @@ }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -891,33 +704,39 @@ }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "3.1.0", "@jridgewell/sourcemap-codec": "1.4.14" @@ -925,70 +744,334 @@ }, "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">=14" } }, - "node_modules/@rollup/pluginutils": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", - "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "node_modules/@sillsdev/scripture": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@sillsdev/scripture/-/scripture-1.4.0.tgz", + "integrity": "sha512-Fwf1+OWfYYS5HmxbBev70dzZHL1a/B/+9c+zxcI76QZaeUEy7hG3BBL/hi1aaWuHC419XX+RaASL6tFng9g7Qg==", + "peer": true + }, + "node_modules/@swc/core": { + "version": "1.3.72", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.72.tgz", + "integrity": "sha512-+AKjwLH3/STfPrd7CHzB9+NG1FVT0UKJMUChuWq9sQ8b9xlV8vUeRgZXgh/EHYvNQgl/OUTQKtL6xU2yOLuEuA==", "dev": true, - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - }, + "hasInstallScript": true, + "peer": true, "engines": { - "node": ">=14.0.0" + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.3.72", + "@swc/core-darwin-x64": "1.3.72", + "@swc/core-linux-arm-gnueabihf": "1.3.72", + "@swc/core-linux-arm64-gnu": "1.3.72", + "@swc/core-linux-arm64-musl": "1.3.72", + "@swc/core-linux-x64-gnu": "1.3.72", + "@swc/core-linux-x64-musl": "1.3.72", + "@swc/core-win32-arm64-msvc": "1.3.72", + "@swc/core-win32-ia32-msvc": "1.3.72", + "@swc/core-win32-x64-msvc": "1.3.72" }, "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0" + "@swc/helpers": "^0.5.0" }, "peerDependenciesMeta": { - "rollup": { + "@swc/helpers": { "optional": true } } }, - "node_modules/@rollup/pluginutils/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "node_modules/@swc/core-darwin-arm64": { + "version": "1.3.72", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.72.tgz", + "integrity": "sha512-oNSI5hVfZ+1xpj+dH1g4kQqA0VsGtqd8S9S+cDqkHZiOOVOevw9KN6dzVtmLOcPtlULVypVc0TVvsB55KdVZhQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.3.72", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.72.tgz", + "integrity": "sha512-y5O/WQ1g0/VfTgeNahWIOutbdD5U2Gi703jaefdcoJo3FUx8WU108QQdbVGwGMgaqapo3iQB6Qs9paixYQAYsA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.3.72", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.72.tgz", + "integrity": "sha512-05JdWcso0OomHF+7bk5MBDgI8MZ9skcQ/4nhSv5gboSgSiuBmKM15Bg3lZ5iAUwGByNj7pGkSmmd3YwTrXEB+g==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.3.72", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.72.tgz", + "integrity": "sha512-8qRELJaeYshhJgqvyOeXCKqBOpai+JYdWuouMbvvDUL85j3OcZhzR+bipexEbbJKcOCdRnoYB7Qg6mjqZ0t7VA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.3.72", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.72.tgz", + "integrity": "sha512-tOqAGZw+Pe7YrBHFrwFVyRiKqjgjzwYbJmY+UDxLrzWrZSVtC3eO2TPrp7kWmhirg40Og81BbdfRAl8ds48w0Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.3.72", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.72.tgz", + "integrity": "sha512-U2W2xWR3s9nplGVWz376GiBlcLTgxyYKlpZPBNZk0w3OvTcjKC62gW1Pe7PUkk4NgJUnaQDBa/mb4V4Zl+GZPA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.3.72", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.72.tgz", + "integrity": "sha512-3+2dUiZBsifKgvnFEHWdysXjInK8K+BfPBw2tTZJmq1+fZLt0rvuErYDVMLfIJnVWLCcJMnDtTXrvkFV1y/6iA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.3.72", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.72.tgz", + "integrity": "sha512-ndI8xZ2AId806D25xgqw2SFJ9gc/jhg21+5hA8XPq9ZL+oDiaYDztaP3ijVmZ1G5xXKD9DpgB7xmylv/f6o6GA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.3.72", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.72.tgz", + "integrity": "sha512-F3TK8JHP3SRFjLRlzcRVZPnvvGm2CQ5/cwbIkaEq0Dla3kyctU8SiRqvtYwWCW4JuY10cUygIg93Ec/C9Lkk4g==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.3.72", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.72.tgz", + "integrity": "sha512-FXMnIUtLl0yEmGkw+xbUg/uUPExvUxUlLSHbX7CnbSuOIHqMHzvEd9skIueLAst4bvmJ8kT1hDyAIWQcTIAJYQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", "dev": true }, + "node_modules/@types/eslint": { + "version": "8.44.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.1.tgz", + "integrity": "sha512-XpNDc4Z5Tb4x+SW1MriMVeIsMoONHCkWFMkR/aPJbzEsxqHy+4Glu/BqTdPrApfDeMaXbtNh6bseNgl5KaWrSg==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, "node_modules/@types/estree": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.12", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", + "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", "dev": true }, "node_modules/@types/node": { - "version": "18.17.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.0.tgz", - "integrity": "sha512-GXZxEtOxYGFchyUzxvKI14iff9KZ2DI+A6a37o6EQevtg6uO9t+aUZKcaC1Te5Ng1OnLM7K9NVVj+FbecD9cJg==", + "version": "18.17.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.1.tgz", + "integrity": "sha512-xlR1jahfizdplZYRU59JlUx9uzF1ARa8jbhM11ccpCJya8kvos5jwdm2ZAgxSCwOl0fq21svP18EVwPBXMQudw==", "dev": true }, "node_modules/@types/prop-types": { "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/react": { - "version": "18.2.15", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.15.tgz", - "integrity": "sha512-oEjE7TQt1fFTFSbf8kkNuc798ahTUzn3Le67/PWjE8MAfYAD/qB7O8hSTcromLFqHCt9bcdOg5GXMokzTjJ5SA==", + "version": "18.2.17", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.17.tgz", + "integrity": "sha512-u+e7OlgPPh+aryjOm5UJMX32OvB2E3QASOAqVMY6Ahs90djagxwv2ya0IctglNbNTexC12qCSMZG47KPfy1hAA==", "dev": true, "dependencies": { "@types/prop-types": "*", @@ -1007,1159 +1090,978 @@ }, "node_modules/@types/scheduler": { "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", - "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/@vitejs/plugin-react": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.0.3.tgz", - "integrity": "sha512-pwXDog5nwwvSIzwrvYYmA2Ljcd/ZNlcsSG2Q9CNDBwnsd55UGAyr2doXtB5j+2uymRCnCfExlznzzSFbBRcoCg==", + "node_modules/@types/webpack": { + "version": "5.28.1", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-5.28.1.tgz", + "integrity": "sha512-qw1MqGZclCoBrpiSe/hokSgQM/su8Ocpl3L/YHE0L6moyaypg4+5F7Uzq7NgaPKPxUxUbQ4fLPLpDWdR27bCZw==", "dev": true, "dependencies": { - "@babel/core": "^7.22.5", - "@babel/plugin-transform-react-jsx-self": "^7.22.5", - "@babel/plugin-transform-react-jsx-source": "^7.22.5", - "react-refresh": "^0.14.0" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "vite": "^4.2.0" + "@types/node": "*", + "tapable": "^2.2.0", + "webpack": "^5" } }, - "node_modules/@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true - }, - "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "node_modules/@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" } }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" } }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", "dev": true, "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" } }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", "dev": true, "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" + "@xtuc/ieee754": "^1.2.0" } }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", "dev": true, - "engines": { - "node": ">= 4.0.0" + "dependencies": { + "@xtuc/long": "4.2.2" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", "dev": true }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" } }, - "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" } }, - "node_modules/browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], "dependencies": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001517", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001517.tgz", - "integrity": "sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", "dev": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" } }, - "node_modules/chalk/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/@webpack-cli/configtest": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", + "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", "dev": true, "engines": { - "node": ">=0.8.0" + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" } }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "node_modules/@webpack-cli/info": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", + "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, "engines": { - "node": ">= 8.10.0" + "node": ">=14.15.0" }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" } }, - "node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "node_modules/@webpack-cli/serve": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", + "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], "engines": { - "node": ">=8" + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } } }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.8.2", "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "license": "MIT", + "bin": { + "acorn": "bin/acorn" }, "engines": { - "node": ">=12" + "node": ">=0.4.0" } }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", "dev": true, - "dependencies": { - "color-name": "1.1.3" + "peerDependencies": { + "acorn": "^8" } }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/concurrently": { + "node_modules/acorn-walk": { "version": "8.2.0", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.0.tgz", - "integrity": "sha512-nnLMxO2LU492mTUj9qX/az/lESonSZu81UznYDoXtz1IQf996ixVqPAgHXwvHiHCAef/7S8HIK+fTFK7Ifk8YA==", "dev": true, - "dependencies": { - "chalk": "^4.1.2", - "date-fns": "^2.30.0", - "lodash": "^4.17.21", - "rxjs": "^7.8.1", - "shell-quote": "^1.8.1", - "spawn-command": "0.0.2", - "supports-color": "^8.1.1", - "tree-kill": "^1.2.2", - "yargs": "^17.7.2" - }, - "bin": { - "conc": "dist/bin/concurrently.js", - "concurrently": "dist/bin/concurrently.js" - }, + "license": "MIT", "engines": { - "node": "^14.13.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" + "node": ">=0.4.0" } }, - "node_modules/concurrently/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/concurrently/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "ajv": "^8.0.0" }, - "engines": { - "node": ">=10" + "peerDependencies": { + "ajv": "^8.0.0" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "peerDependenciesMeta": { + "ajv": { + "optional": true + } } }, - "node_modules/concurrently/node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "fast-deep-equal": "^3.1.3" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "ajv": "^8.8.2" } }, - "node_modules/concurrently/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "dependencies": { - "color-name": "~1.1.4" + "type-fest": "^0.21.3" }, "engines": { - "node": ">=7.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/concurrently/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/concurrently/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/ansi-regex": { + "version": "5.0.1", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/concurrently/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "node_modules/anymatch": { + "version": "3.1.3", "dev": true, + "license": "ISC", "dependencies": { - "has-flag": "^4.0.0" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "node": ">= 8" } }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/cross-env": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", - "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "node_modules/archiver": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.1.tgz", + "integrity": "sha512-8KyabkmbYrH+9ibcTScQ1xCJC/CGcugdVIwB+53f5sZziXgwUh3iXlAlANMxcZyDEfTHMe6+Z5FofV8nopXP7w==", "dev": true, "dependencies": { - "cross-spawn": "^7.0.1" - }, - "bin": { - "cross-env": "src/bin/cross-env.js", - "cross-env-shell": "src/bin/cross-env-shell.js" + "archiver-utils": "^2.1.0", + "async": "^3.2.3", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.0.0", + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" }, "engines": { - "node": ">=10.14", - "npm": ">=6", - "yarn": ">=1" + "node": ">= 10" } }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", "dev": true, "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" }, "engines": { - "node": ">= 8" + "node": ">= 6" } }, - "node_modules/csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", - "dev": true + "node_modules/archiver-utils/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, - "node_modules/date-fns": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", - "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "node_modules/archiver-utils/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "dependencies": { - "@babel/runtime": "^7.21.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=0.11" + "node": "*" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/date-fns" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/archiver-utils/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "dependencies": { - "ms": "2.1.2" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": "*" } }, - "node_modules/diff": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", - "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", + "node_modules/archiver-utils/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, - "engines": { - "node": ">=0.3.1" + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "node_modules/archiver-utils/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, - "node_modules/electron-to-chromium": { - "version": "1.4.468", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.468.tgz", - "integrity": "sha512-6M1qyhaJOt7rQtNti1lBA0GwclPH+oKCmsra/hkcWs5INLxfXXD/dtdnaKUYQu/pjOBP/8Osoe4mAcNvvzoFag==", - "dev": true + "node_modules/archiver-utils/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "dev": true }, - "node_modules/esbuild": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.16.tgz", - "integrity": "sha512-1xLsOXrDqwdHxyXb/x/SOyg59jpf/SH7YMvU5RNSU7z3TInaASNJWNFJ6iRvLvLETZMasF3d1DdZLg7sgRimRQ==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.18.16", - "@esbuild/android-arm64": "0.18.16", - "@esbuild/android-x64": "0.18.16", - "@esbuild/darwin-arm64": "0.18.16", - "@esbuild/darwin-x64": "0.18.16", - "@esbuild/freebsd-arm64": "0.18.16", - "@esbuild/freebsd-x64": "0.18.16", - "@esbuild/linux-arm": "0.18.16", - "@esbuild/linux-arm64": "0.18.16", - "@esbuild/linux-ia32": "0.18.16", - "@esbuild/linux-loong64": "0.18.16", - "@esbuild/linux-mips64el": "0.18.16", - "@esbuild/linux-ppc64": "0.18.16", - "@esbuild/linux-riscv64": "0.18.16", - "@esbuild/linux-s390x": "0.18.16", - "@esbuild/linux-x64": "0.18.16", - "@esbuild/netbsd-x64": "0.18.16", - "@esbuild/openbsd-x64": "0.18.16", - "@esbuild/sunos-x64": "0.18.16", - "@esbuild/win32-arm64": "0.18.16", - "@esbuild/win32-ia32": "0.18.16", - "@esbuild/win32-x64": "0.18.16" - } + "node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "node_modules/balanced-match": { + "version": "1.0.2", "dev": true, - "engines": { - "node": ">=6" - } + "license": "MIT" }, - "node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", - "dev": true + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "node_modules/binary-extensions": { + "version": "2.2.0", "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/find-yarn-workspace-root": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", - "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, "dependencies": { - "micromatch": "^4.0.2" + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, - "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "balanced-match": "^1.0.0" } }, - "node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "node_modules/braces": { + "version": "3.0.2", "dev": true, + "license": "MIT", "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "fill-range": "^7.0.1" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "node_modules/browserslist": { + "version": "4.21.5", "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/glob": { - "version": "10.3.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.3.tgz", - "integrity": "sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==", - "dev": true, + "license": "MIT", "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" }, "bin": { - "glob": "dist/cjs/src/bin.js" + "browserslist": "cli.js" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "dev": true, "engines": { - "node": ">=4" + "node": "*" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "node_modules/caniuse-lite": { + "version": "1.0.30001478", "dev": true, - "engines": { - "node": ">=4" - } + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" }, - "node_modules/immutable": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz", - "integrity": "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==", + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, - "node_modules/import-manager": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/import-manager/-/import-manager-0.4.4.tgz", - "integrity": "sha512-XMhHRrcTY2AJ1NDFrP0pJVp1PzrAq8tnCr2han9ygSRFHwWsZal8UHpfLAbMMvfJaDQxWUN4hqSf80R/x6sdeQ==", + "node_modules/chokidar": { + "version": "3.5.3", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", "dependencies": { - "acorn": "^8.10.0", - "acorn-walk": "^8.2.0", - "colorette": "^2.0.20", - "magic-string": "^0.30.1" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "engines": { + "node": ">=6.0" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, "dependencies": { - "binary-extensions": "^2.0.0" + "restore-cursor": "^3.1.0" }, "engines": { "node": ">=8" } }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "node_modules/cli-spinners": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", + "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", "dev": true, - "bin": { - "is-docker": "cli.js" - }, "engines": { - "node": ">=8" + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { + "node_modules/cli-width": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", "dev": true, "engines": { - "node": ">=8" + "node": ">= 10" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/cliui": { + "version": "8.0.1", "dev": true, + "license": "ISC", "dependencies": { - "is-extglob": "^2.1.1" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, "engines": { - "node": ">=0.12.0" + "node": ">=0.8" } }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, "dependencies": { - "is-docker": "^2.0.0" + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "node_modules/colorette": { + "version": "2.0.20", + "dev": true, + "license": "MIT" }, - "node_modules/jackspeak": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.0.tgz", - "integrity": "sha512-r5XBrqIJfwRIjRt/Xr5fv9Wh09qyhHfKnYddDlpM+ibRR20qrYActpCAgU6U+d53EOEjzkvxPMVHSlgR7leXrQ==", + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/compress-commons": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz", + "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==", "dev": true, "dependencies": { - "@isaacs/cliui": "^8.0.2" + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" }, "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" + "node": ">= 10" } }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "node_modules/concat-map": { + "version": "0.0.1", + "dev": true, + "license": "MIT" }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "node_modules/concurrently": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.0.tgz", + "integrity": "sha512-nnLMxO2LU492mTUj9qX/az/lESonSZu81UznYDoXtz1IQf996ixVqPAgHXwvHiHCAef/7S8HIK+fTFK7Ifk8YA==", "dev": true, + "dependencies": { + "chalk": "^4.1.2", + "date-fns": "^2.30.0", + "lodash": "^4.17.21", + "rxjs": "^7.8.1", + "shell-quote": "^1.8.1", + "spawn-command": "0.0.2", + "supports-color": "^8.1.1", + "tree-kill": "^1.2.2", + "yargs": "^17.7.2" + }, "bin": { - "jsesc": "bin/jsesc" + "conc": "dist/bin/concurrently.js", + "concurrently": "dist/bin/concurrently.js" }, "engines": { - "node": ">=4" + "node": "^14.13.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" } }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "node_modules/concurrently/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, - "bin": { - "json5": "lib/cli.js" + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" }, "engines": { - "node": ">=6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "node_modules/concurrently/node_modules/chalk": { + "version": "4.1.2", "dev": true, + "license": "MIT", "dependencies": { - "universalify": "^2.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/klaw-sync": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", - "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", + "node_modules/concurrently/node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", "dev": true, + "license": "MIT", "dependencies": { - "graceful-fs": "^4.1.11" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "node_modules/concurrently/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" + "color-name": "~1.1.4" }, - "bin": { - "loose-envify": "cli.js" + "engines": { + "node": ">=7.0.0" } }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "node_modules/concurrently/node_modules/color-name": { + "version": "1.1.4", "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } + "license": "MIT" }, - "node_modules/magic-string": { - "version": "0.30.1", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.1.tgz", - "integrity": "sha512-mbVKXPmS0z0G4XqFDCTllmDQ6coZzn94aMlb0o/A4HEHJCKcanlDZwYJgwnkmgD3jyWhUgj9VsPrfd972yPffA==", + "node_modules/concurrently/node_modules/has-flag": { + "version": "4.0.0", "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "node_modules/concurrently/node_modules/supports-color": { + "version": "8.1.1", "dev": true, + "license": "MIT", "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=8.6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "node_modules/copy-webpack-plugin": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", + "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", "dev": true, "dependencies": { - "brace-expansion": "^2.0.1" + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">= 14.15.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" } }, - "node_modules/minipass": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.2.tgz", - "integrity": "sha512-eL79dXrE1q9dBbDCLg7xfn/vl7MS4F1gvJAgjJrQli/jbQWdUttuVawphqpffoIYfRdq78LHx6GP4bU/EQ2ATA==", + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=10.13.0" } }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, - "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], "bin": { - "nanoid": "bin/nanoid.cjs" + "crc32": "bin/crc32.njs" }, "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", - "dev": true - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" + "node": ">=0.8" } }, - "node_modules/open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "node_modules/crc32-stream": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", + "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", "dev": true, "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "engines": { - "node": ">=8" + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 10" } }, - "node_modules/papi-components": { - "resolved": "../paranext-core/lib/papi-components", - "link": true - }, - "node_modules/papi-dts": { - "resolved": "../paranext-core/lib/papi-dts", - "link": true + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true }, - "node_modules/patch-package": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-7.0.2.tgz", - "integrity": "sha512-PMYfL8LXxGIRmxXLqlEaBxzKPu7/SdP13ld6GSfAUJUZRmBDPp8chZs0dpzaAFn9TSPnFiMwkC6PJt6pBiAl8Q==", + "node_modules/cross-env": { + "version": "7.0.3", "dev": true, + "license": "MIT", "dependencies": { - "@yarnpkg/lockfile": "^1.1.0", - "chalk": "^4.1.2", - "ci-info": "^3.7.0", - "cross-spawn": "^7.0.3", - "find-yarn-workspace-root": "^2.0.0", - "fs-extra": "^9.0.0", - "klaw-sync": "^6.0.0", - "minimist": "^1.2.6", - "open": "^7.4.2", - "rimraf": "^2.6.3", - "semver": "^7.5.3", - "slash": "^2.0.0", - "tmp": "^0.0.33", - "yaml": "^2.2.2" + "cross-spawn": "^7.0.1" }, "bin": { - "patch-package": "index.js" + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" }, "engines": { - "node": ">=14", - "npm": ">5" + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" } }, - "node_modules/patch-package/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/cross-spawn": { + "version": "7.0.3", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">= 8" } }, - "node_modules/patch-package/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/css-loader": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", + "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "icss-utils": "^5.1.0", + "postcss": "^8.4.21", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.3", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.8" }, "engines": { - "node": ">=10" + "node": ">= 12.13.0" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/patch-package/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" + "type": "opencollective", + "url": "https://opencollective.com/webpack" }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/patch-package/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/patch-package/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" + "peerDependencies": { + "webpack": "^5.0.0" } }, - "node_modules/patch-package/node_modules/lru-cache": { + "node_modules/css-loader/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", @@ -2171,7 +2073,7 @@ "node": ">=10" } }, - "node_modules/patch-package/node_modules/semver": { + "node_modules/css-loader/node_modules/semver": { "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", @@ -2186,359 +2088,310 @@ "node": ">=10" } }, - "node_modules/patch-package/node_modules/slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/patch-package/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/patch-package/node_modules/yallist": { + "node_modules/css-loader/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/csstype": { + "version": "3.1.2", "dev": true, - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "node_modules/date-fns": { + "version": "2.30.0", "dev": true, + "license": "MIT", "dependencies": { - "lru-cache": "^9.1.1 || ^10.0.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + "@babel/runtime": "^7.21.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=0.11" }, "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.0.tgz", - "integrity": "sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==", - "dev": true, - "engines": { - "node": "14 || >=16.14" + "type": "opencollective", + "url": "https://opencollective.com/date-fns" } }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, - "engines": { - "node": ">=8.6" + "dependencies": { + "clone": "^1.0.2" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss": { - "version": "8.4.27", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.27.tgz", - "integrity": "sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==", + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "path-type": "^4.0.0" }, "engines": { - "node": "^10 || ^12 || >=14" + "node": ">=8" } }, - "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } + "node_modules/eastasianwidth": { + "version": "0.2.0", + "dev": true, + "license": "MIT" }, - "node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "node_modules/electron-to-chromium": { + "version": "1.4.360", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - }, - "peerDependencies": { - "react": "^18.2.0" + "once": "^1.4.0" } }, - "node_modules/react-refresh": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", - "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10.13.0" } }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "node_modules/envinfo": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz", + "integrity": "sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==", "dev": true, - "dependencies": { - "picomatch": "^2.2.1" + "bin": { + "envinfo": "dist/cli.js" }, "engines": { - "node": ">=8.10.0" + "node": ">=4" } }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "node_modules/es-module-lexer": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", + "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", "dev": true }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "node_modules/escalade": { + "version": "3.1.1", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "node_modules/escape-string-regexp": { + "version": "5.0.0", "dev": true, - "dependencies": { - "glob": "^7.1.3" + "license": "MIT", + "engines": { + "node": ">=12" }, - "bin": { - "rimraf": "bin.js" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" } }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "estraverse": "^5.2.0" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=4.0" } }, - "node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, "engines": { - "node": "*" + "node": ">=4.0" } }, - "node_modules/rollup": { - "version": "3.25.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.25.2.tgz", - "integrity": "sha512-VLnkxZMDr3jpxgtmS8pQZ0UvhslmF4ADq/9w4erkctbgjCqLW9oa89fJuXEs4ZmgyoF7Dm8rMDKSS5b5u2hHUg==", + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, "engines": { - "node": ">=14.18.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "node": ">=4.0" } }, - "node_modules/rollup-plugin-import-manager": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/rollup-plugin-import-manager/-/rollup-plugin-import-manager-0.6.4.tgz", - "integrity": "sha512-9maMWHZsk7120CP2T8QRtyi7GHNvHpPR9iMlPaTqRbZp8shZdC3NKsUfxFkSWUhYgp6AygcQ8DEs2HmPPS47Pg==", + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, - "dependencies": { - "@rollup/pluginutils": "^5.0.2", - "colorette": "^2.0.20", - "diff": "^5.1.0", - "import-manager": "^0.4.4" + "engines": { + "node": ">=0.8.x" } }, - "node_modules/rollup-plugin-string": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-string/-/rollup-plugin-string-3.0.0.tgz", - "integrity": "sha512-vqyzgn9QefAgeKi+Y4A7jETeIAU1zQmS6VotH6bzm/zmUQEnYkpIGRaOBPY41oiWYV4JyBoGAaBjYMYuv+6wVw==", + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, "dependencies": { - "rollup-pluginutils": "^2.4.1" + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" } }, - "node_modules/rollup-pluginutils": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", - "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", "dev": true, "dependencies": { - "estree-walker": "^0.6.1" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" } }, - "node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true, - "dependencies": { - "tslib": "^2.1.0" + "engines": { + "node": ">= 4.9.1" } }, - "node_modules/sass": { - "version": "1.64.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.64.1.tgz", - "integrity": "sha512-16rRACSOFEE8VN7SCgBu1MpYCyN7urj9At898tyzdXFhC+a+yOX5dXwAR7L8/IdPJ1NB8OYoXmD55DM30B2kEQ==", + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "dev": true, "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=14.0.0" + "reusify": "^1.0.4" } }, - "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, "dependencies": { - "loose-envify": "^1.1.0" + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "engines": { + "node": ">=0.8.0" } }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "node_modules/fill-range": { + "version": "7.0.1", "dev": true, + "license": "MIT", "dependencies": { - "shebang-regex": "^3.0.0" + "to-regex-range": "^5.0.1" }, "engines": { "node": ">=8" } }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, "engines": { "node": ">=8" } }, - "node_modules/shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.1.tgz", - "integrity": "sha512-uUWsN4aOxJAS8KOuf3QMyFtgm1pkb6I+KRZbRF/ghdf5T7sM+B1lLLzPDxswUjkmHyxQAVzEgG35E3NzDM9GVw==", + "node_modules/foreground-child": { + "version": "3.1.1", "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, "engines": { "node": ">=14" }, @@ -2546,293 +2399,222 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/spawn-command": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz", - "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==", + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "dev": true }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/fs.realpath": { + "version": "1.0.0", "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } + "license": "ISC" }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/function-bind": { + "version": "1.1.1", "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/get-caller-file": { + "version": "2.0.5", "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, + "license": "ISC", "engines": { - "node": ">=8" + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/glob": { + "version": "10.3.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.3.tgz", + "integrity": "sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==", "dev": true, "dependencies": { - "ansi-regex": "^5.0.1" + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/cjs/src/bin.js" }, "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/glob-parent": { + "version": "5.1.2", "dev": true, + "license": "ISC", "dependencies": { - "has-flag": "^3.0.0" + "is-glob": "^4.0.1" }, "engines": { - "node": ">=4" + "node": ">= 6" } }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", "dev": true, "dependencies": { - "os-tmpdir": "~1.0.2" + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" }, "engines": { - "node": ">=0.6.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "node_modules/graceful-fs": { + "version": "4.2.11", "dev": true, - "engines": { - "node": ">=4" - } + "license": "ISC" }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "node_modules/has": { + "version": "1.0.3", "dev": true, + "license": "MIT", "dependencies": { - "is-number": "^7.0.0" + "function-bind": "^1.1.1" }, "engines": { - "node": ">=8.0" - } - }, - "node_modules/tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true, - "bin": { - "tree-kill": "cli.js" + "node": ">= 0.4.0" } }, - "node_modules/tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", - "dev": true - }, - "node_modules/typescript": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", - "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { - "node": ">=14.17" + "node": ">=0.10.0" } }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", "dev": true, "engines": { - "node": ">= 10.0.0" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true, "funding": [ { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" + "type": "github", + "url": "https://github.com/sponsors/feross" }, { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" + "type": "patreon", + "url": "https://www.patreon.com/feross" }, { - "type": "github", - "url": "https://github.com/sponsors/ai" + "type": "consulting", + "url": "https://feross.org/support" } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" + ] + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" } }, - "node_modules/vite": { - "version": "4.4.6", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.6.tgz", - "integrity": "sha512-EY6Mm8vJ++S3D4tNAckaZfw3JwG3wa794Vt70M6cNJ6NxT87yhq7EC8Rcap3ahyHdo8AhCmV9PTk+vG1HiYn1A==", + "node_modules/immutable": { + "version": "4.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", "dev": true, "dependencies": { - "esbuild": "^0.18.10", - "postcss": "^8.4.26", - "rollup": "^3.25.2" + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" }, "bin": { - "vite": "bin/vite.js" + "import-local-fixture": "fixtures/cli.js" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": ">=8" }, "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - }, - "peerDependencies": { - "@types/node": ">= 14", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/inflight": { + "version": "1.0.6", "dev": true, + "license": "ISC", "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "node_modules/inherits": { + "version": "2.0.4", "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } + "license": "ISC" }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "node_modules/inquirer": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.5.tgz", + "integrity": "sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==", "dev": true, "dependencies": { - "ansi-styles": "^4.0.0", + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">=12.0.0" } }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "node_modules/inquirer/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -2847,40 +2629,23 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/wrap-ansi-cjs/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/wrap-ansi/node_modules/color-convert": { + "node_modules/inquirer/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", @@ -2892,2040 +2657,2306 @@ "node": ">=7.0.0" } }, - "node_modules/wrap-ansi/node_modules/color-name": { + "node_modules/inquirer/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "node_modules/inquirer/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "node_modules/inquirer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/yallist": { + "node_modules/interpret": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/yaml": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz", - "integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", "dev": true, "engines": { - "node": ">= 14" + "node": ">=10.13.0" } }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "node_modules/is-binary-path": { + "version": "2.1.0", "dev": true, + "license": "MIT", "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" + "binary-extensions": "^2.0.0" }, "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "node_modules/is-core-module": { + "version": "2.12.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", "dev": true, + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=0.10.0" } - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "node_modules/is-glob": { + "version": "4.0.3", "dev": true, - "requires": { - "@babel/highlight": "^7.22.5" + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "@babel/compat-data": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", - "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", - "dev": true + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "@babel/core": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.9.tgz", - "integrity": "sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.9", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helpers": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.8", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.1" + "node_modules/is-number": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" } }, - "@babel/generator": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz", - "integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==", + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, - "requires": { - "@babel/types": "^7.22.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "@babel/helper-compilation-targets": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz", - "integrity": "sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==", + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, - "requires": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.9", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true }, - "@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "node_modules/isexe": { + "version": "2.0.0", "dev": true, - "requires": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - } + "license": "ISC" }, - "@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true, - "requires": { - "@babel/types": "^7.22.5" + "engines": { + "node": ">=0.10.0" } }, - "@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "node_modules/jackspeak": { + "version": "2.2.0", "dev": true, - "requires": { - "@babel/types": "^7.22.5" + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "@babel/helper-module-transforms": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", - "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.5" + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" } }, - "@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true - }, - "@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "requires": { - "@babel/types": "^7.22.5" + "engines": { + "node": ">=8" } }, - "@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, - "requires": { - "@babel/types": "^7.22.5" + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", - "dev": true + "node_modules/js-tokens": { + "version": "4.0.0", + "license": "MIT", + "peer": true }, - "@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, - "@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, - "@babel/helpers": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz", - "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==", + "node_modules/json5": { + "version": "2.2.3", "dev": true, - "requires": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.6", - "@babel/types": "^7.22.5" + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" } }, - "@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "engines": { + "node": ">=0.10.0" } }, - "@babel/parser": { - "version": "7.22.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz", - "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==", - "dev": true - }, - "@babel/plugin-transform-react-jsx-self": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.22.5.tgz", - "integrity": "sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==", + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" } }, - "@babel/plugin-transform-react-jsx-source": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.22.5.tgz", - "integrity": "sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==", + "node_modules/lazystream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.22.5" + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "@babel/runtime": { - "version": "7.21.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.5.tgz", - "integrity": "sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.11" - } + "node_modules/lazystream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, - "@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "node_modules/lazystream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, - "requires": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" + "dependencies": { + "safe-buffer": "~5.1.0" } }, - "@babel/traverse": { - "version": "7.22.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.8.tgz", - "integrity": "sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==", + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "dev": true, - "requires": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.7", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/types": "^7.22.5", - "debug": "^4.1.0", - "globals": "^11.1.0" + "engines": { + "node": ">=6.11.5" } }, - "@babel/types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", - "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, - "requires": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" } }, - "@esbuild/android-arm": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.16.tgz", - "integrity": "sha512-gCHjjQmA8L0soklKbLKA6pgsLk1byULuHe94lkZDzcO3/Ta+bbeewJioEn1Fr7kgy9NWNFy/C+MrBwC6I/WCug==", + "node_modules/lodash": { + "version": "4.17.21", "dev": true, - "optional": true + "license": "MIT" }, - "@esbuild/android-arm64": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.16.tgz", - "integrity": "sha512-wsCqSPqLz+6Ov+OM4EthU43DyYVVyfn15S4j1bJzylDpc1r1jZFFfJQNfDuT8SlgwuqpmpJXK4uPlHGw6ve7eA==", - "dev": true, - "optional": true + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", + "dev": true }, - "@esbuild/android-x64": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.16.tgz", - "integrity": "sha512-ldsTXolyA3eTQ1//4DS+E15xl0H/3DTRJaRL0/0PgkqDsI0fV/FlOtD+h0u/AUJr+eOTlZv4aC9gvfppo3C4sw==", - "dev": true, - "optional": true + "node_modules/lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", + "dev": true }, - "@esbuild/darwin-arm64": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.16.tgz", - "integrity": "sha512-aBxruWCII+OtluORR/KvisEw0ALuw/qDQWvkoosA+c/ngC/Kwk0lLaZ+B++LLS481/VdydB2u6tYpWxUfnLAIw==", - "dev": true, - "optional": true + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", + "dev": true }, - "@esbuild/darwin-x64": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.16.tgz", - "integrity": "sha512-6w4Dbue280+rp3LnkgmriS1icOUZDyPuZo/9VsuMUTns7SYEiOaJ7Ca1cbhu9KVObAWfmdjUl4gwy9TIgiO5eA==", - "dev": true, - "optional": true + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true }, - "@esbuild/freebsd-arm64": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.16.tgz", - "integrity": "sha512-x35fCebhe9s979DGKbVAwXUOcTmCIE32AIqB9CB1GralMIvxdnMLAw5CnID17ipEw9/3MvDsusj/cspYt2ZLNQ==", - "dev": true, - "optional": true + "node_modules/lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", + "dev": true }, - "@esbuild/freebsd-x64": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.16.tgz", - "integrity": "sha512-YM98f+PeNXF3GbxIJlUsj+McUWG1irguBHkszCIwfr3BXtXZsXo0vqybjUDFfu9a8Wr7uUD/YSmHib+EeGAFlg==", + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, - "optional": true + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "@esbuild/linux-arm": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.16.tgz", - "integrity": "sha512-b5ABb+5Ha2C9JkeZXV+b+OruR1tJ33ePmv9ZwMeETSEKlmu/WJ45XTTG+l6a2KDsQtJJ66qo/hbSGBtk0XVLHw==", + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "optional": true + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } }, - "@esbuild/linux-arm64": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.16.tgz", - "integrity": "sha512-XIqhNUxJiuy+zsR77+H5Z2f7s4YRlriSJKtvx99nJuG5ATuJPjmZ9n0ANgnGlPCpXGSReFpgcJ7O3SMtzIFeiQ==", + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "optional": true + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } }, - "@esbuild/linux-ia32": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.16.tgz", - "integrity": "sha512-no+pfEpwnRvIyH+txbBAWtjxPU9grslmTBfsmDndj7bnBmr55rOo/PfQmRfz7Qg9isswt1FP5hBbWb23fRWnow==", + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "optional": true + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } }, - "@esbuild/linux-loong64": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.16.tgz", - "integrity": "sha512-Zbnczs9ZXjmo0oZSS0zbNlJbcwKXa/fcNhYQjahDs4Xg18UumpXG/lwM2lcSvHS3mTrRyCYZvJbmzYc4laRI1g==", - "dev": true, - "optional": true + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "@esbuild/linux-mips64el": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.16.tgz", - "integrity": "sha512-YMF7hih1HVR/hQVa/ot4UVffc5ZlrzEb3k2ip0nZr1w6fnYypll9td2qcoMLvd3o8j3y6EbJM3MyIcXIVzXvQQ==", + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "optional": true + "engines": { + "node": ">=8" + } }, - "@esbuild/linux-ppc64": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.16.tgz", - "integrity": "sha512-Wkz++LZ29lDwUyTSEnzDaaP5OveOgTU69q9IyIw9WqLRxM4BjTBjz9un4G6TOvehWpf/J3gYVFN96TjGHrbcNQ==", + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "optional": true + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, - "@esbuild/linux-riscv64": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.16.tgz", - "integrity": "sha512-LFMKZ30tk78/mUv1ygvIP+568bwf4oN6reG/uczXnz6SvFn4e2QUFpUpZY9iSJT6Qpgstrhef/nMykIXZtZWGQ==", - "dev": true, - "optional": true + "node_modules/loose-envify": { + "version": "1.4.0", + "license": "MIT", + "peer": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } }, - "@esbuild/linux-s390x": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.16.tgz", - "integrity": "sha512-3ZC0BgyYHYKfZo3AV2/66TD/I9tlSBaW7eWTEIkrQQKfJIifKMMttXl9FrAg+UT0SGYsCRLI35Gwdmm96vlOjg==", - "dev": true, - "optional": true + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true }, - "@esbuild/linux-x64": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.16.tgz", - "integrity": "sha512-xu86B3647DihHJHv/wx3NCz2Dg1gjQ8bbf9cVYZzWKY+gsvxYmn/lnVlqDRazObc3UMwoHpUhNYaZset4X8IPA==", - "dev": true, - "optional": true + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true }, - "@esbuild/netbsd-x64": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.16.tgz", - "integrity": "sha512-uVAgpimx9Ffw3xowtg/7qQPwHFx94yCje+DoBx+LNm2ePDpQXHrzE+Sb0Si2VBObYz+LcRps15cq+95YM7gkUw==", + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, - "optional": true + "engines": { + "node": ">= 8" + } }, - "@esbuild/openbsd-x64": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.16.tgz", - "integrity": "sha512-6OjCQM9wf7z8/MBi6BOWaTL2AS/SZudsZtBziXMtNI8r/U41AxS9x7jn0ATOwVy08OotwkPqGRMkpPR2wcTJXA==", + "node_modules/micromatch": { + "version": "4.0.5", "dev": true, - "optional": true + "license": "MIT", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } }, - "@esbuild/sunos-x64": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.16.tgz", - "integrity": "sha512-ZoNkruFYJp9d1LbUYCh8awgQDvB9uOMZqlQ+gGEZR7v6C+N6u7vPr86c+Chih8niBR81Q/bHOSKGBK3brJyvkQ==", + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, - "optional": true + "engines": { + "node": ">= 0.6" + } }, - "@esbuild/win32-arm64": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.16.tgz", - "integrity": "sha512-+j4anzQ9hrs+iqO+/wa8UE6TVkKua1pXUb0XWFOx0FiAj6R9INJ+WE//1/Xo6FG1vB5EpH3ko+XcgwiDXTxcdw==", + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, - "optional": true + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } }, - "@esbuild/win32-ia32": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.16.tgz", - "integrity": "sha512-5PFPmq3sSKTp9cT9dzvI67WNfRZGvEVctcZa1KGjDDu4n3H8k59Inbk0du1fz0KrAbKKNpJbdFXQMDUz7BG4rQ==", + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, - "optional": true + "engines": { + "node": ">=6" + } }, - "@esbuild/win32-x64": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.16.tgz", - "integrity": "sha512-sCIVrrtcWN5Ua7jYXNG1xD199IalrbfV2+0k/2Zf2OyV2FtnQnMgdzgpRAbi4AWlKJj1jkX+M+fEGPQj6BQB4w==", - "dev": true, - "optional": true - }, - "@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, - "requires": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true - }, - "ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dev": true, - "requires": { - "ansi-regex": "^6.0.1" - } - }, - "wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "requires": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - } - } + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "node_modules/minimist": { + "version": "1.2.8", "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "node_modules/minipass": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.2.tgz", + "integrity": "sha512-eL79dXrE1q9dBbDCLg7xfn/vl7MS4F1gvJAgjJrQli/jbQWdUttuVawphqpffoIYfRdq78LHx6GP4bU/EQ2ATA==", "dev": true, - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - }, - "dependencies": { - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - } + "engines": { + "node": ">=16 || 14 >=14.17" } }, - "@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "optional": true + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true }, - "@rollup/pluginutils": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", - "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "node_modules/nanoid": { + "version": "3.3.6", "dev": true, - "requires": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - }, - "dependencies": { - "estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", - "dev": true - }, - "@types/node": { - "version": "18.17.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.0.tgz", - "integrity": "sha512-GXZxEtOxYGFchyUzxvKI14iff9KZ2DI+A6a37o6EQevtg6uO9t+aUZKcaC1Te5Ng1OnLM7K9NVVj+FbecD9cJg==", + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, - "@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "dev": true + "node_modules/node-releases": { + "version": "2.0.10", + "dev": true, + "license": "MIT" }, - "@types/react": { - "version": "18.2.15", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.15.tgz", - "integrity": "sha512-oEjE7TQt1fFTFSbf8kkNuc798ahTUzn3Le67/PWjE8MAfYAD/qB7O8hSTcromLFqHCt9bcdOg5GXMokzTjJ5SA==", + "node_modules/normalize-path": { + "version": "3.0.0", "dev": true, - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "@types/react-dom": { - "version": "18.2.7", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.7.tgz", - "integrity": "sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==", + "node_modules/once": { + "version": "1.4.0", "dev": true, - "requires": { - "@types/react": "*" + "license": "ISC", + "dependencies": { + "wrappy": "1" } }, - "@types/scheduler": { - "version": "0.16.3", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", - "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==", - "dev": true - }, - "@vitejs/plugin-react": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.0.3.tgz", - "integrity": "sha512-pwXDog5nwwvSIzwrvYYmA2Ljcd/ZNlcsSG2Q9CNDBwnsd55UGAyr2doXtB5j+2uymRCnCfExlznzzSFbBRcoCg==", + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, - "requires": { - "@babel/core": "^7.22.5", - "@babel/plugin-transform-react-jsx-self": "^7.22.5", - "@babel/plugin-transform-react-jsx-source": "^7.22.5", - "react-refresh": "^0.14.0" + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true - }, - "acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true - }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, - "requires": { - "color-convert": "^1.9.0" + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "node_modules/ora/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "node_modules/ora/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "requires": { - "balanced-match": "^1.0.0" + "engines": { + "node": ">=8" } }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "requires": { - "fill-range": "^7.0.1" + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "node_modules/os-tmpdir": { + "version": "1.0.2", "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "caniuse-lite": { - "version": "1.0.30001517", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001517.tgz", - "integrity": "sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - } + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" } }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "engines": { + "node": ">=6" } }, - "ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true + "node_modules/papi-components": { + "resolved": "../paranext-core/lib/papi-components", + "link": true }, - "cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "node_modules/papi-dts": { + "resolved": "../paranext-core/lib/papi-dts", + "link": true + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "engines": { + "node": ">=8" } }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/path-is-absolute": { + "version": "1.0.1", "dev": true, - "requires": { - "color-name": "1.1.3" + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "node_modules/path-key": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true + "node_modules/path-parse": { + "version": "1.0.7", + "dev": true, + "license": "MIT" }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "concurrently": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.0.tgz", - "integrity": "sha512-nnLMxO2LU492mTUj9qX/az/lESonSZu81UznYDoXtz1IQf996ixVqPAgHXwvHiHCAef/7S8HIK+fTFK7Ifk8YA==", + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", "dev": true, - "requires": { - "chalk": "^4.1.2", - "date-fns": "^2.30.0", - "lodash": "^4.17.21", - "rxjs": "^7.8.1", - "shell-quote": "^1.8.1", - "spawn-command": "0.0.2", - "supports-color": "^8.1.1", - "tree-kill": "^1.2.2", - "yargs": "^17.7.2" - }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "cross-env": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", - "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.0.tgz", + "integrity": "sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==", "dev": true, - "requires": { - "cross-spawn": "^7.0.1" + "engines": { + "node": "14 || >=16.14" } }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "engines": { + "node": ">=8" } }, - "csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", - "dev": true - }, - "date-fns": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", - "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "node_modules/picocolors": { + "version": "1.0.0", "dev": true, - "requires": { - "@babel/runtime": "^7.21.0" - } + "license": "ISC" }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/picomatch": { + "version": "2.3.1", "dev": true, - "requires": { - "ms": "2.1.2" + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "diff": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", - "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", - "dev": true - }, - "eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.4.468", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.468.tgz", - "integrity": "sha512-6M1qyhaJOt7rQtNti1lBA0GwclPH+oKCmsra/hkcWs5INLxfXXD/dtdnaKUYQu/pjOBP/8Osoe4mAcNvvzoFag==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "esbuild": { - "version": "0.18.16", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.16.tgz", - "integrity": "sha512-1xLsOXrDqwdHxyXb/x/SOyg59jpf/SH7YMvU5RNSU7z3TInaASNJWNFJ6iRvLvLETZMasF3d1DdZLg7sgRimRQ==", - "dev": true, - "requires": { - "@esbuild/android-arm": "0.18.16", - "@esbuild/android-arm64": "0.18.16", - "@esbuild/android-x64": "0.18.16", - "@esbuild/darwin-arm64": "0.18.16", - "@esbuild/darwin-x64": "0.18.16", - "@esbuild/freebsd-arm64": "0.18.16", - "@esbuild/freebsd-x64": "0.18.16", - "@esbuild/linux-arm": "0.18.16", - "@esbuild/linux-arm64": "0.18.16", - "@esbuild/linux-ia32": "0.18.16", - "@esbuild/linux-loong64": "0.18.16", - "@esbuild/linux-mips64el": "0.18.16", - "@esbuild/linux-ppc64": "0.18.16", - "@esbuild/linux-riscv64": "0.18.16", - "@esbuild/linux-s390x": "0.18.16", - "@esbuild/linux-x64": "0.18.16", - "@esbuild/netbsd-x64": "0.18.16", - "@esbuild/openbsd-x64": "0.18.16", - "@esbuild/sunos-x64": "0.18.16", - "@esbuild/win32-arm64": "0.18.16", - "@esbuild/win32-ia32": "0.18.16", - "@esbuild/win32-x64": "0.18.16" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true - }, - "estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", - "dev": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, - "requires": { - "to-regex-range": "^5.0.1" + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "find-yarn-workspace-root": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", - "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "node_modules/postcss": { + "version": "8.4.21", "dev": true, - "requires": { - "micromatch": "^4.0.2" + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" } }, - "foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", + "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", "dev": true, - "optional": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } }, - "glob": { - "version": "10.3.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.3.tgz", - "integrity": "sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==", + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dev": true, - "requires": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", "dev": true, - "requires": { - "is-glob": "^4.0.1" + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" } }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, - "immutable": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz", - "integrity": "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==", + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "import-manager": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/import-manager/-/import-manager-0.4.4.tgz", - "integrity": "sha512-XMhHRrcTY2AJ1NDFrP0pJVp1PzrAq8tnCr2han9ygSRFHwWsZal8UHpfLAbMMvfJaDQxWUN4hqSf80R/x6sdeQ==", + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "dev": true, - "requires": { - "acorn": "^8.10.0", - "acorn-walk": "^8.2.0", - "colorette": "^2.0.20", - "magic-string": "^0.30.1" + "engines": { + "node": ">=6" } }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "is-binary-path": { + "node_modules/randombytes": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, - "requires": { - "binary-extensions": "^2.0.0" + "dependencies": { + "safe-buffer": "^5.1.0" } }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" + "node_modules/react": { + "version": "18.2.0", + "license": "MIT", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true + "node_modules/react-dom": { + "version": "18.2.0", + "license": "MIT", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, - "requires": { - "is-docker": "^2.0.0" + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "jackspeak": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.0.tgz", - "integrity": "sha512-r5XBrqIJfwRIjRt/Xr5fv9Wh09qyhHfKnYddDlpM+ibRR20qrYActpCAgU6U+d53EOEjzkvxPMVHSlgR7leXrQ==", + "node_modules/readdir-glob": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", + "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", "dev": true, - "requires": { - "@isaacs/cliui": "^8.0.2", - "@pkgjs/parseargs": "^0.11.0" + "dependencies": { + "minimatch": "^5.1.0" } }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "node_modules/readdir-glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" } }, - "klaw-sync": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", - "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", + "node_modules/readdirp": { + "version": "3.6.0", "dev": true, - "requires": { - "graceful-fs": "^4.1.11" + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" } }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" } }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "node_modules/regenerator-runtime": { + "version": "0.13.11", "dev": true, - "requires": { - "yallist": "^3.0.2" - } + "license": "MIT" }, - "magic-string": { - "version": "0.30.1", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.1.tgz", - "integrity": "sha512-mbVKXPmS0z0G4XqFDCTllmDQ6coZzn94aMlb0o/A4HEHJCKcanlDZwYJgwnkmgD3jyWhUgj9VsPrfd972yPffA==", + "node_modules/require-directory": { + "version": "2.1.1", "dev": true, - "requires": { - "@jridgewell/sourcemap-codec": "^1.4.15" + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" + "engines": { + "node": ">=0.10.0" } }, - "minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "node_modules/resolve": { + "version": "1.22.2", "dev": true, - "requires": { - "brace-expansion": "^2.0.1" + "license": "MIT", + "dependencies": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true - }, - "minipass": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.2.tgz", - "integrity": "sha512-eL79dXrE1q9dBbDCLg7xfn/vl7MS4F1gvJAgjJrQli/jbQWdUttuVawphqpffoIYfRdq78LHx6GP4bU/EQ2ATA==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "dev": true - }, - "node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", - "dev": true - }, - "normalize-path": { + "node_modules/resolve-cwd": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, - "requires": { - "wrappy": "1" + "engines": { + "node": ">=8" } }, - "open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, - "requires": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" } }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, - "papi-components": { - "version": "file:../paranext-core/lib/papi-components", - "requires": { - "@senojs/rollup-plugin-style-inject": "^0.2.3", - "@types/react": "^18.2.15", - "@types/react-dom": "^18.2.7", - "@typescript-eslint/eslint-plugin": "^5.62.0", - "@typescript-eslint/parser": "^5.62.0", - "@vitejs/plugin-react": "^4.0.3", - "dts-bundle-generator": "^8.0.1", - "eslint": "^8.45.0", - "eslint-config-prettier": "^8.8.0", - "eslint-plugin-prettier": "^4.2.1", - "prettier": "^2.8.8", - "stylelint": "^15.10.2", - "stylelint-config-recommended": "^13.0.0", - "stylelint-config-sass-guidelines": "^10.0.0", - "ts-node": "^10.9.1", - "tslib": "^2.6.0", - "typescript": "^5.1.6", - "vite": "^4.4.5" + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, - "papi-dts": { - "version": "file:../paranext-core/lib/papi-dts", - "requires": { - "escape-string-regexp": "^5.0.0", - "rimraf": "^5.0.1", - "typescript": "^5.1.6" + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "engines": { + "node": ">=0.12.0" } }, - "patch-package": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-7.0.2.tgz", - "integrity": "sha512-PMYfL8LXxGIRmxXLqlEaBxzKPu7/SdP13ld6GSfAUJUZRmBDPp8chZs0dpzaAFn9TSPnFiMwkC6PJt6pBiAl8Q==", + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, - "requires": { - "@yarnpkg/lockfile": "^1.1.0", - "chalk": "^4.1.2", - "ci-info": "^3.7.0", - "cross-spawn": "^7.0.3", - "find-yarn-workspace-root": "^2.0.0", - "fs-extra": "^9.0.0", - "klaw-sync": "^6.0.0", - "minimist": "^1.2.6", - "open": "^7.4.2", - "rimraf": "^2.6.3", - "semver": "^7.5.3", - "slash": "^2.0.0", - "tmp": "^0.0.33", - "yaml": "^2.2.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } + { + "type": "patreon", + "url": "https://www.patreon.com/feross" }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + { + "type": "consulting", + "url": "https://feross.org/support" } + ], + "dependencies": { + "queue-microtask": "^1.2.2" } }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true + "node_modules/rxjs": { + "version": "7.8.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, - "path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "node_modules/sass": { + "version": "1.64.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.64.1.tgz", + "integrity": "sha512-16rRACSOFEE8VN7SCgBu1MpYCyN7urj9At898tyzdXFhC+a+yOX5dXwAR7L8/IdPJ1NB8OYoXmD55DM30B2kEQ==", "dev": true, - "requires": { - "lru-cache": "^9.1.1 || ^10.0.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-loader": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.2.tgz", + "integrity": "sha512-CQbKl57kdEv+KDLquhC+gE3pXt74LEAzm+tzywcA0/aHZuub8wTErbjAoNI57rPUWRYRNC5WUnNl8eGJNbDdwg==", + "dev": true, "dependencies": { - "lru-cache": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.0.tgz", - "integrity": "sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==", - "dev": true + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true } } }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "node_modules/scheduler": { + "version": "0.23.0", + "license": "MIT", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" + } }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true + "node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } }, - "postcss": { - "version": "8.4.27", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.27.tgz", - "integrity": "sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==", + "node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", "dev": true, - "requires": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "dependencies": { + "randombytes": "^2.1.0" } }, - "react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "requires": { - "loose-envify": "^1.1.0" + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" } }, - "react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "requires": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" + "node_modules/shebang-command": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "react-refresh": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", - "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", - "dev": true + "node_modules/shebang-regex": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "node_modules/shell-quote": { + "version": "1.8.1", "dev": true, - "requires": { - "picomatch": "^2.2.1" + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true + "node_modules/signal-exit": { + "version": "4.0.1", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true + "node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "requires": { - "glob": "^7.1.3" + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/spawn-command": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz", + "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==", + "dev": true + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/swc-loader": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/swc-loader/-/swc-loader-0.2.3.tgz", + "integrity": "sha512-D1p6XXURfSPleZZA/Lipb3A8pZ17fP4NObZvFCDjK/OKljroqDpPmsBdTraWhVBqUNpcWBQY1imWdoPScRlQ7A==", + "dev": true, + "peerDependencies": { + "@swc/core": "^1.2.147", + "webpack": ">=2" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.19.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.2.tgz", + "integrity": "sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "node_modules/tmp": { + "version": "0.0.33", + "dev": true, + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/tsconfig-paths": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", + "dev": true, + "dependencies": { + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tsconfig-paths-webpack-plugin": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-4.1.0.tgz", + "integrity": "sha512-xWFISjviPydmtmgeUAuXp4N1fky+VCtfhOkDUFIv5ea7p4wuTomI4QTrXvFBX2S4jZsmyTSrStQl+E+4w+RzxA==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.7.0", + "tsconfig-paths": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/tsconfig-paths-webpack-plugin/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/tsconfig-paths-webpack-plugin/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/tsconfig-paths-webpack-plugin/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/tsconfig-paths-webpack-plugin/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/tsconfig-paths-webpack-plugin/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tsconfig-paths-webpack-plugin/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tslib": { + "version": "2.5.0", + "dev": true, + "license": "0BSD" + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", + "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.10", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webpack": { + "version": "5.88.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz", + "integrity": "sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-cli": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", + "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^2.1.1", + "@webpack-cli/info": "^2.0.2", + "@webpack-cli/serve": "^2.0.5", + "colorette": "^2.0.14", + "commander": "^10.0.1", + "cross-spawn": "^7.0.3", + "envinfo": "^7.7.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } + "peerDependencies": { + "webpack": "5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } + "webpack-bundle-analyzer": { + "optional": true }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } + "webpack-dev-server": { + "optional": true } } }, - "rollup": { - "version": "3.25.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.25.2.tgz", - "integrity": "sha512-VLnkxZMDr3jpxgtmS8pQZ0UvhslmF4ADq/9w4erkctbgjCqLW9oa89fJuXEs4ZmgyoF7Dm8rMDKSS5b5u2hHUg==", - "dev": true, - "requires": { - "fsevents": "~2.3.2" - } - }, - "rollup-plugin-import-manager": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/rollup-plugin-import-manager/-/rollup-plugin-import-manager-0.6.4.tgz", - "integrity": "sha512-9maMWHZsk7120CP2T8QRtyi7GHNvHpPR9iMlPaTqRbZp8shZdC3NKsUfxFkSWUhYgp6AygcQ8DEs2HmPPS47Pg==", + "node_modules/webpack-cli/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "dev": true, - "requires": { - "@rollup/pluginutils": "^5.0.2", - "colorette": "^2.0.20", - "diff": "^5.1.0", - "import-manager": "^0.4.4" + "engines": { + "node": ">=14" } }, - "rollup-plugin-string": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-string/-/rollup-plugin-string-3.0.0.tgz", - "integrity": "sha512-vqyzgn9QefAgeKi+Y4A7jETeIAU1zQmS6VotH6bzm/zmUQEnYkpIGRaOBPY41oiWYV4JyBoGAaBjYMYuv+6wVw==", + "node_modules/webpack-merge": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", + "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", "dev": true, - "requires": { - "rollup-pluginutils": "^2.4.1" + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" } }, - "rollup-pluginutils": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", - "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", "dev": true, - "requires": { - "estree-walker": "^0.6.1" + "engines": { + "node": ">=10.13.0" } }, - "rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "node_modules/webpack/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "requires": { - "tslib": "^2.1.0" + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "sass": { - "version": "1.64.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.64.1.tgz", - "integrity": "sha512-16rRACSOFEE8VN7SCgBu1MpYCyN7urj9At898tyzdXFhC+a+yOX5dXwAR7L8/IdPJ1NB8OYoXmD55DM30B2kEQ==", + "node_modules/webpack/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, - "requires": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - } - }, - "scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "requires": { - "loose-envify": "^1.1.0" + "peerDependencies": { + "ajv": "^6.9.1" } }, - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/webpack/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, - "requires": { - "shebang-regex": "^3.0.0" + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", - "dev": true - }, - "signal-exit": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.0.1.tgz", - "integrity": "sha512-uUWsN4aOxJAS8KOuf3QMyFtgm1pkb6I+KRZbRF/ghdf5T7sM+B1lLLzPDxswUjkmHyxQAVzEgG35E3NzDM9GVw==", - "dev": true - }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true + "node_modules/which": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } }, - "spawn-command": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz", - "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==", + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", "dev": true }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/wrap-ansi": { + "version": "7.0.0", "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "string-width-cjs": { - "version": "npm:string-width@4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, - "requires": { - "ansi-regex": "^5.0.1" + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "strip-ansi-cjs": { - "version": "npm:strip-ansi@6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", "dev": true, - "requires": { - "ansi-regex": "^5.0.1" + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", "dev": true, - "requires": { - "has-flag": "^3.0.0" - } + "license": "MIT" }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", "dev": true, - "requires": { - "is-number": "^7.0.0" + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true - }, - "tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", - "dev": true + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" }, - "typescript": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", - "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", - "dev": true + "node_modules/wrappy": { + "version": "1.0.2", + "dev": true, + "license": "ISC" }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true + "node_modules/y18n": { + "version": "5.0.8", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } }, - "update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "node_modules/yargs": { + "version": "17.7.2", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" } }, - "vite": { - "version": "4.4.6", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.6.tgz", - "integrity": "sha512-EY6Mm8vJ++S3D4tNAckaZfw3JwG3wa794Vt70M6cNJ6NxT87yhq7EC8Rcap3ahyHdo8AhCmV9PTk+vG1HiYn1A==", + "node_modules/yargs-parser": { + "version": "21.1.1", "dev": true, - "requires": { - "esbuild": "^0.18.10", - "fsevents": "~2.3.2", - "postcss": "^8.4.26", - "rollup": "^3.25.2" + "license": "ISC", + "engines": { + "node": ">=12" } }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, - "requires": { - "isexe": "^2.0.0" + "engines": { + "node": ">=6" } }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "node_modules/zip-build": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/zip-build/-/zip-build-1.8.0.tgz", + "integrity": "sha512-4wYrsrYyme1RTeNCCXg9AwseQFRpj3n7qjiIfaq9qtOAYevgbhtktCzxK7CL0KDZyz/tA9Yxqrn1HismAiJ/eg==", "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } + "inquirer": "^8.2.5", + "yargs": "^16.2.0", + "zip-folder-promise": "^1.2.0" + }, + "bin": { + "zip-build": "lib/index.js" } }, - "wrap-ansi-cjs": { - "version": "npm:wrap-ansi@7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "node_modules/zip-build/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "yaml": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.2.tgz", - "integrity": "sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==", - "dev": true - }, - "yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "node_modules/zip-build/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, - "requires": { - "cliui": "^8.0.1", + "dependencies": { + "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.3", + "string-width": "^4.2.0", "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" } }, - "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true + "node_modules/zip-build/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/zip-folder-promise": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/zip-folder-promise/-/zip-folder-promise-1.2.0.tgz", + "integrity": "sha512-SwD7SJfZZTr8/0s1adZx80oReGFIuEnyqYLU1XtCqNwSDeEOcB8OnjPBuOh7WujPGffP4wrjVSFi8k62vTgnyw==", + "dev": true, + "dependencies": { + "archiver": "^5.3.1" + } + }, + "node_modules/zip-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", + "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", + "dev": true, + "dependencies": { + "archiver-utils": "^2.1.0", + "compress-commons": "^4.1.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } } } } diff --git a/package.json b/package.json index 144c6e2..f22a092 100644 --- a/package.json +++ b/package.json @@ -2,38 +2,53 @@ "name": "paranext-extension-sneeze-board", "private": true, "version": "0.0.1", - "type": "module", + "main": "paranext-extension-sneeze-board.js", + "types": "paranext-extension-sneeze-board.d.ts", + "author": "SIL", + "license": "MIT", "scripts": { - "build:vite1": "vite build --config vite/vite-web-view.config.ts", - "build:vite2": "vite build --config vite/vite.config.ts", - "build:vite": "npm run build:vite1 && npm run build:vite2", - "start:vite1": "vite build --watch --config vite/vite-web-view.config.ts", - "start:vite2": "vite build --watch --config vite/vite.config.ts", - "start:vite": "concurrently \"npm:start:vite1\" \"npm:start:vite2\"", + "build:web-view": "webpack --config ./webpack/webpack.config.web-view.ts", + "build:main": "webpack --config ./webpack/webpack.config.main.ts", + "build": "webpack", + "watch": "npm run build -- --watch", + "build:production": "cross-env NODE_ENV=production TS_NODE_TRANSPILE_ONLY=false webpack", + "watch:production": "npm run build:production -- --watch", + "zip": "zip-build dist release --template '%NAME%_%VERSION%.%EXT%' --override", + "package": "npm run build:production && npm run zip", + "package:debug": "cross-env DEBUG_PROD=true npm run package", "start:core": "cd ../paranext-core && npm run start", - "start": "cross-env MAIN_ARGS=\"--extensions $INIT_CWD/dist\" concurrently \"npm:start:vite\" \"npm:start:core\"", + "start": "cross-env MAIN_ARGS=\"--extensions $INIT_CWD/dist\" concurrently \"npm:watch\" \"npm:start:core\"", + "start:production": "cross-env MAIN_ARGS=\"--extensions $INIT_CWD/dist\" concurrently \"npm:watch:production\" \"npm:start:core\"", "lint": "tsc" }, - "dependencies": { - "papi-components": "file:../paranext-core/lib/papi-components", - "react": "^18.2.0", - "react-dom": "^18.2.0" + "peerDependencies": { + "@sillsdev/scripture": "^1.4.0", + "react": ">=18.2.0", + "react-dom": ">=18.2.0" }, "devDependencies": { "@types/node": "^18.17.0", "@types/react": "^18.2.15", "@types/react-dom": "^18.2.7", - "@vitejs/plugin-react": "^4.0.3", + "@types/webpack": "^5.28.1", "concurrently": "^8.2.0", + "copy-webpack-plugin": "^11.0.0", "cross-env": "^7.0.3", + "css-loader": "^6.8.1", "escape-string-regexp": "^5.0.0", "glob": "^10.3.3", + "papi-components": "file:../paranext-core/lib/papi-components", "papi-dts": "file:../paranext-core/lib/papi-dts", - "patch-package": "^7.0.2", - "rollup-plugin-import-manager": "^0.6.4", - "rollup-plugin-string": "^3.0.0", "sass": "^1.64.1", + "sass-loader": "^13.3.2", + "swc-loader": "^0.2.3", + "ts-node": "^10.9.1", + "tsconfig-paths": "^4.2.0", + "tsconfig-paths-webpack-plugin": "^4.0.1", "typescript": "^5.1.6", - "vite": "^4.4.6" + "webpack": "^5.88.1", + "webpack-cli": "^5.1.4", + "webpack-merge": "^5.9.0", + "zip-build": "^1.8.0" } } diff --git a/public/assets/heresy-warning.txt b/public/assets/heresy-warning.txt new file mode 100644 index 0000000..107f3e2 --- /dev/null +++ b/public/assets/heresy-warning.txt @@ -0,0 +1 @@ +Heresy count: diff --git a/public/manifest.json b/public/manifest.json index 8327cd0..ca8e748 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -2,7 +2,7 @@ "name": "paranext-extension-sneeze-board", "version": "0.0.1", "description": "Example Paranext extension to display a sneeze board", - "author": "Rolf Heij and Katherine Jensen", + "author": "SIL (Rolf Heij, Katherine Jensen and Tom Bogle)", "license": "MIT", "main": "paranext-extension-sneeze-board.ts", "activationEvents": [] diff --git a/lib/main.ts b/src/main.ts similarity index 97% rename from lib/main.ts rename to src/main.ts index 5d2f3ae..4fdd9a0 100644 --- a/lib/main.ts +++ b/src/main.ts @@ -1,9 +1,8 @@ import papi from 'papi-backend'; import { UnsubscriberAsync } from 'shared/utils/papi-util'; import type IDataProviderEngine from 'shared/models/data-provider-engine.model'; -import { AchYouDataTypes } from 'extension-types'; -// @ts-expect-error ts(1192) this file has no default export; the text is exported by rollup -import sneezeBoardWebView from './sneeze-board.web-view'; +import { AchYouDataTypes } from 'paranext-extension-sneeze-board'; +import sneezeBoardWebView from './sneeze-board.web-view?inline'; import styles from './sneeze-board.web-view.scss?inline'; import type { IWebViewProvider } from 'shared/models/web-view-provider.model'; import type { SavedWebViewDefinition, WebViewDefinition } from 'shared/data/web-view.model'; diff --git a/lib/sneeze-board.data.json b/src/sneeze-board.data.json similarity index 100% rename from lib/sneeze-board.data.json rename to src/sneeze-board.data.json diff --git a/lib/sneeze-board.web-view.scss b/src/sneeze-board.web-view.scss similarity index 100% rename from lib/sneeze-board.web-view.scss rename to src/sneeze-board.web-view.scss diff --git a/lib/sneeze-board.web-view.tsx b/src/sneeze-board.web-view.tsx similarity index 98% rename from lib/sneeze-board.web-view.tsx rename to src/sneeze-board.web-view.tsx index b9cb606..6278f99 100644 --- a/lib/sneeze-board.web-view.tsx +++ b/src/sneeze-board.web-view.tsx @@ -1,6 +1,6 @@ import papi from 'papi-frontend'; import { ChangeEvent, SyntheticEvent, useState } from 'react'; -import { AchYouDataProvider, AchYouDataTypes, Sneeze } from 'extension-types'; +import { AchYouDataProvider, AchYouDataTypes, Sneeze } from 'paranext-extension-sneeze-board'; import { Button, ComboBox, TextField } from 'papi-components'; // TODO: fix this. This can't be imported anymore since this is a standalone extension. Does it need to move to `papi-utils`? diff --git a/public/paranext-extension-sneeze-board.d.ts b/src/types/paranext-extension-sneeze-board.d.ts similarity index 100% rename from public/paranext-extension-sneeze-board.d.ts rename to src/types/paranext-extension-sneeze-board.d.ts diff --git a/src/webpack-env.d.ts b/src/webpack-env.d.ts new file mode 100644 index 0000000..f1f6b71 --- /dev/null +++ b/src/webpack-env.d.ts @@ -0,0 +1,57 @@ +// #region shared with https://github.com/paranext/paranext-core/blob/main/extensions/src/webpack-env.d.ts + +/** + * Modules provided by our webpack configuration + * + * Please keep these JSDocs up-to-date with their counterparts in `webpack.config.base.ts` + */ + +// #region code and things + +/** + * Import fully loaded and transformed files as strings with "./file?inline" + * + * WARNING: These files are NOT bundled. The rules are applied, but webpack does not bundle + * dependencies into these files before providing them, unfortunately. However, React WebView + * files are an exception as they are fully bundled. + */ +declare module '*?inline' { + const content: string; + export default content; +} + +/** + * Import files with no transformation as strings with "./file?raw" + */ +declare module '*?raw' { + const content: string; + export default content; +} + +/** + * Import scss, sass, and css files as strings + */ +declare module '*.scss' { + const content: string; + export default content; +} + +/** + * Import scss, sass, and css files as strings + */ +declare module '*.sass' { + const content: string; + export default content; +} + +/** + * Import scss, sass, and css files as strings + */ +declare module '*.css' { + const content: string; + export default content; +} + +// #endregion + +// #endregion diff --git a/tsconfig.json b/tsconfig.json index 1230154..5f73ea1 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,23 +4,46 @@ "useDefineForClassFields": true, "lib": ["DOM", "DOM.Iterable", "ESNext"], "allowJs": false, - "skipLibCheck": true, - "esModuleInterop": false, + // ts-node needs this to load webpack.config.ts for some reason. Errs otherwise + // https://webpack.js.org/configuration/configuration-languages/#typescript + // Using a separate config file just for webpack.config.ts by using environment variable + // TS_NODE_PROJECT was making tsconfig-paths-webpack-plugin use the other config, not this + // original tsconfig.json, so these path aliases wouldn't work + "esModuleInterop": true, "allowSyntheticDefaultImports": true, "strict": true, "forceConsistentCasingInFileNames": true, - "module": "ESNext", + // Paranext requires modules to be CommonJS + // Running webpack.config.ts also requires CommonJS + // https://webpack.js.org/configuration/configuration-languages/#typescript + "module": "CommonJS", "moduleResolution": "Node", "resolveJsonModule": true, - "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "types": ["papi-dts"], - "paths": { - "extension-types": ["./public/paranext-extension-sneeze-board"] - }, - "experimentalDecorators": true + "typeRoots": [ + // Include default type declarations + "node_modules/@types", + // Include papi-dts type declarations (for papi.d.ts) + "../paranext-core/lib", + // Include other extensions' type declarations + "../paranext-core/extensions/src", + // Include this extension's type declarations. It's in this location so there aren't any + // unexpected files there for typeRoots to include + "src/types" + ], + // Papi exposes decorators for use in classes + "experimentalDecorators": true, + // We want sourcemaps so we can bundle them with webpack + "sourceMap": true, + // We need a baseurl for webpack's tsconfig path aliases plugin + "baseUrl": "./" }, - "include": ["lib", "public/paranext-extension-sneeze-board.d.ts"], - "references": [{ "path": "./tsconfig.node.json" }] + "include": ["src"], + "ts-node": { + // This allows us to use path aliases in ts-node + "require": ["tsconfig-paths/register"], + // This allows us to run webpack even if there are type errors in the webpack configs. Optional + "transpileOnly": true + } } diff --git a/tsconfig.node.json b/tsconfig.node.json index db8be12..69e181b 100644 --- a/tsconfig.node.json +++ b/tsconfig.node.json @@ -5,5 +5,4 @@ "moduleResolution": "Node", "allowSyntheticDefaultImports": true }, - "include": ["vite"] } diff --git a/vite/vite-web-view.config.ts b/vite/vite-web-view.config.ts deleted file mode 100644 index 3c43920..0000000 --- a/vite/vite-web-view.config.ts +++ /dev/null @@ -1,98 +0,0 @@ -// #region Shared with https://github.com/paranext/paranext-core/blob/main/vite/vite-web-view.config.ts - -/** - * First Vite build step for transpiling TypeScript WebViews - */ - -import { defineConfig } from "vite"; -import path from "path"; -import react from "@vitejs/plugin-react"; -import { - getFileExtensionByModuleFormat, - getWebViewTsxPaths, - paranextProvidedModules, - webViewTempDir, -} from "./vite.util"; - -// https://vitejs.dev/config/ -const webViewConfig = defineConfig(async ({ mode }) => { - /** List of TypeScript WebView files to transpile */ - const tsxWebViews = await getWebViewTsxPaths(); - - /** Tracks which entry file we're working with in determining the file name. */ - let entryFileIndex = 0; - - return { - plugins: [ - // use React.createElement - react({ jsxRuntime: "classic" }), - ], - // Since Vite is in library mode `process` is not replaced by default and that won't work in the - // renderer. - define: { "process.env.NODE_ENV": JSON.stringify(mode) }, - build: { - // This project is a library as it is being used in Paranext - lib: { - // List each WebView file as an entry file because each needs to be transpiled - entry: tsxWebViews.map((webView) => - path.resolve(__dirname, "../", webView) - ), - /** - * Get the output file name for each WebView. - * - * WARNING: We're assuming the file name function runs in order. We will - * throw if we notice any issues with this assumption, but there is a - * possibility that two different WebViews named the same in two different - * files could get swapped if Vite doesn't play by our assumption. - */ - fileName: (moduleFormat, entryName) => { - // Get the corresponding webView file for this entry - const webViewFilePath = tsxWebViews[entryFileIndex]; - const webViewFileInfo = path.parse(webViewFilePath); - if (entryName !== webViewFileInfo.name) - throw new Error( - `Error building in Vite: entryName ${entryName} does not match WebView file name ${webViewFileInfo.name}! File path: ${webViewFilePath} entryFileIndex ${entryFileIndex}` - ); - - // Set up the next call to this function to get the next WebView file - // Vite does not get the config every time it rebuilds during watching, so we need to wrap the index manually as - // Vite does not re-run the config and set the index back to zero - entryFileIndex = (entryFileIndex + 1) % tsxWebViews.length; - - // Put transpiled WebViews in a temp folder in the same directory as the original WebView - return path.join( - webViewFileInfo.dir, - webViewTempDir, - `${webViewFileInfo.name}.${getFileExtensionByModuleFormat( - moduleFormat - )}` - ); - }, - // Output to cjs format as that's what Paranext supports. In production, es modules fail to - // shim over import and deliver papi for some reason. - formats: ["cjs"], - }, - rollupOptions: { - // Do not bundle papi because it will be imported in Paranext - external: paranextProvidedModules, - output: { - // Disable code splitting and chunks. Extension WebViews must be a single file - manualChunks: () => "webView", - }, - }, - // Bundle the sourcemap into the webview file since it will be injected as a string - // into the main file - sourcemap: "inline", - // We are placing the built WebView files next to their original files - outDir: "", - // We do not want to erase the entire project! - emptyOutDir: false, - // We do not want to copy the public files as we will do that in the next build step - copyPublicDir: false, - }, - }; -}); - -export default webViewConfig; - -// #endregion diff --git a/vite/vite.config.ts b/vite/vite.config.ts deleted file mode 100644 index b1755be..0000000 --- a/vite/vite.config.ts +++ /dev/null @@ -1,84 +0,0 @@ -/** - * Second Vite build step for transpiling main and packaging into an extension - */ - -import { defineConfig } from "vite"; -import path from "path"; -import { importManager } from "rollup-plugin-import-manager"; -import escapeStringRegexp from "escape-string-regexp"; -import { string as importString } from "rollup-plugin-string"; -import { - paranextProvidedModules, - webViewGlob, - getWebViewTsxPaths, - insertWebViewTempDir, - webViewTempGlob, - getFileExtensionByModuleFormat, -} from "./vite.util"; - -// https://vitejs.dev/config/ -const extensionConfig = defineConfig(async () => { - /** List of TypeScript WebView files transpiled in the first build step */ - const tsxWebViews = await getWebViewTsxPaths(); - - return { - plugins: [ - // Shared with https://github.com/paranext/paranext-core/blob/main/vite/vite.config.ts - // Redirect WebView imports to their version built in the first build step - importManager({ - // Need to include all files that could import WebViews - include: "**/*.{ts,tsx,js,jsx}", - units: tsxWebViews.map((webView) => { - const webViewInfo = path.parse(webView); - // Get the file name without the extension if it is tsx as tsx is inferred when importing - const webViewModuleName = - webViewInfo.ext === ".tsx" ? webViewInfo.name : webViewInfo.base; - return { - module: - // Match the whole module name, nothing more, nothing less - new RegExp(`^${escapeStringRegexp(webViewModuleName)}$`), - actions: { - select: "module", - rename: insertWebViewTempDir, - }, - }; - }), - }), - // Shared with https://github.com/paranext/paranext-core/blob/main/vite/vite.config.ts - // Import web view files as strings to pass on the papi - { - ...importString({ - include: [webViewGlob, webViewTempGlob], - }), - // importString plugin must be after any other plugins that need to transpile these files - enforce: "post", - }, - ], - build: { - // This project is a library as it is being used in Paranext - lib: { - // The main entry file of the extension - entry: path.resolve(__dirname, "../lib/main.ts"), - // The output file name for the extension (file extension is appended) - fileName: (moduleFormat, entryName) => - `paranext-extension-sneeze-board.${getFileExtensionByModuleFormat( - moduleFormat - )}`, - // Output to cjs format as that's what Paranext supports - formats: ["cjs"], - }, - rollupOptions: { - // Do not bundle papi because it will be imported in Paranext - external: paranextProvidedModules, - output: { - // Disable code splitting and chunks. Extension main must be a single file - manualChunks: () => "main", - }, - }, - // Generate sourcemaps as separate files since VSCode can load them directly - sourcemap: true, - }, - }; -}); - -export default extensionConfig; diff --git a/vite/vite.util.ts b/vite/vite.util.ts deleted file mode 100644 index 6ec41ab..0000000 --- a/vite/vite.util.ts +++ /dev/null @@ -1,81 +0,0 @@ -import path from "path"; -import { ModuleFormat } from "rollup"; -import { glob } from "glob"; - -// #region shared with https://github.com/paranext/paranext-core/blob/main/vite/vite.util.ts - -/** - * Glob filename matcher for web views. - * React Web Views should be named .web-view.tsx - * HTML Web Views should be named .web-view.ejs - * - Note: the HTML web views are .ejs files because rollup was not recognizing them to have exports for some reason. - */ -export const webViewGlob = "**/*.web-view.{tsx,ejs}"; -export const webViewTsxGlob = "**/*.web-view.tsx"; - -/** - * Regex matcher for TypeScript WebView imports - */ -export const webViewTsxImportRegex = /^.+\.web-view(\.tsx)?$/; - -/** Name of adjacent folder used to store WebView files transpiled in the first build step */ -export const webViewTempDir = "temp-vite"; -export const webViewTempGlob = `**/${webViewTempDir}/*.web-view.js`; - -/** Modules that Paranext supplies so extensions can use them easily */ -export const paranextProvidedModules = [ - "react", - "react-dom/client", - "papi-frontend", - "papi-backend", -]; - -/** - * Gets a file extension based on the moduleFormat input. - * Vite does this automatically for us if `fileName` is a string, - * but we want our cjs module to be '.js' while still using ES Module - * imports in our vite config. - * - * If package.json does not contain 'type': 'module', Vite swaps some file extensions out. - * Short explanation in a note at https://vitejs.dev/guide/build.html#library-mode - * - * @param moduleFormat Vite-official module formats are listed at https://vitejs.dev/config/build-options.html#build-lib but you can use any rollup module format - */ -export function getFileExtensionByModuleFormat(moduleFormat: ModuleFormat) { - switch (moduleFormat) { - case "es": - return "js"; - case "cjs": - return "js"; // Vite uses '.cjs' if package.json has "type": "module", but Paranext uses commonjs modules, so let's just use 'js' - case "umd": - return "umd.cjs"; - default: - return `${moduleFormat}.js`; - } -} - -/** - * Get a list of TypeScript WebView files to transpile. - * Path relative to project root - */ -export function getWebViewTsxPaths() { - return glob(webViewTsxGlob, { ignore: "node_modules/**" }); -} - -/** - * Formats a WebView import module path to read its built version - * @param moduleSourceRaw whole module import string including quotes e.g. `"./my.web-view"` - * @returns WebView import module path with temporary WebView directory inserted into the module path - */ -export function insertWebViewTempDir(moduleSourceRaw: string) { - // Note the style of quotes used - const quote = moduleSourceRaw.at(0); - // Get rid of the quotes - const importPath = moduleSourceRaw.slice(1, -1); - const importInfo = path.parse(importPath); - const newPath = [importInfo.dir, webViewTempDir, importInfo.base].join("/"); - const finalModuleSource = `${quote}${newPath}${quote}`; - return finalModuleSource; -} - -// #endregion diff --git a/webpack.config.ts b/webpack.config.ts new file mode 100644 index 0000000..cfe4ac3 --- /dev/null +++ b/webpack.config.ts @@ -0,0 +1,15 @@ +// #region shared with https://github.com/paranext/paranext-core/blob/main/extensions/webpack.config.ts + +import webpack from 'webpack'; +import configWebView from './webpack/webpack.config.web-view'; +import configMain from './webpack/webpack.config.main'; + +// Note: Using a .ts file as the webpack config requires not having "type": "module" in package.json +// https://stackoverflow.com/a/76005614 + +// We want to build web views and then build main +const config: webpack.Configuration[] = [configWebView, configMain]; + +export default config; + +// #endregion diff --git a/webpack/web-view-resolve-webpack-plugin.ts b/webpack/web-view-resolve-webpack-plugin.ts new file mode 100644 index 0000000..49a5c84 --- /dev/null +++ b/webpack/web-view-resolve-webpack-plugin.ts @@ -0,0 +1,114 @@ +// #region shared with https://github.com/paranext/paranext-core/blob/main/extensions/webpack/web-view-resolve-webpack-plugin.ts + +import { Resolver } from 'webpack'; +import { getWebViewTempPath, webViewTempDir, webViewTsxRegex } from './webpack.util'; + +// Webpack resolve plugins are enhanced-resolve plugins, which use tapable under the hood. +// Unfortunately, most of this api is very scantly documented, so I pretty much went off of examples +// and trial-and-error. I added lots of documentation here so there is at least some documentation. +// enhanced-resolve https://github.com/webpack/enhanced-resolve +// tapable https://github.com/webpack/tapable +// enhanced-resolve plugin examples https://github.com/webpack/enhanced-resolve/blob/main/lib/ExtensionAliasPlugin.js +// DirectoryNamedWebpackPlugin https://github.com/shaketbaby/directory-named-webpack-plugin/blob/master/index.js +/** Webpack resolution plugin that redirects WebView imports to their compiled version */ +export default class WebViewResolveWebpackPlugin { + // I didn't find much on what the hooks are called, but maybe at least some of them are the keys + // of KnownHooks: https://github.com/webpack/enhanced-resolve/blob/a998c7d218b7a9ec2461fc4fddd1ad5dd7687485/types.d.ts#L240 + // Also https://github.com/webpack/webpack/issues/6817#issuecomment-542448438 shows how to add + // path alias functionality with this plugin syntax. + // However, it seems the mystery of available hooks is not solved as DirectoryNamedWebpackPlugin + // uses hook names that are not in KnownHooks. + /** Tap into the enhanced-resolve "resolve" hook with our resolve logic. */ + readonly source = 'resolve'; + /** Feed into the enhanced-resolve "resolve" hook from our resolve logic */ + readonly target = 'resolve'; + + /** + * Function that applies this plugin to webpack resolving. Use the resolver to "tap into" webpack + * resolving with our own logic + * @param resolver + */ + apply(resolver: Resolver) { + // Get the resolve hook for performing a new resolve for some reason. + // Just following what is in examples - not sure why do this instead of using the same hook + // in both places and why use `ensureHook` here and `getHook` below. + const target = resolver.ensureHook(this.target); + resolver + // Get the resolve hook + .getHook(this.source) + // Add our plugin to the list of resolvers to run + .tapAsync( + // Internally note that this is our plugin + 'WebViewResolveWebpackPlugin', + /** + * The logic to add to webpack resolving so it will look in the temp dir for built code. + * + * @param request information about the resolve request + * @param resolveContext information about the process the hook has taken to get here + * @param callback function to run to continue the resolution process + * - call with no parameters to continue resolving like this plugin did nothing + * - call with first parameter null and second parameter a fully resolved + * `{ path, relativePath }` (including file extension) to conclude resolving at that file + * - call with first parameter `string` or `Error` or something (not sure) to indicate + * error + * - Note: another option is to call `resolver.doResolve` to start the resolution process + * over with a new `path` and `relativePath` that do not need to be fully resolved. Just + * make sure that second call can't come into your hook again and cause another + * `resolver.doResolve`, or you will have an infinite loop. We pass this `callback` param + * into `resolver.doResolve`, and it calls it automatically + * @returns Seems it doesn't matter if or what you return. Just return to quit early + */ + (request, resolveContext, callback) => { + // If the request is somehow not defined (not sure how - just part of the type definition) + // or already has the temp dir in the path (meaning we have already modified the path), + // continue resolving without this plugin so we do not edit the request a second time + if ( + // If somehow it isn't a request, do not edit it. Not sure when this would happen + !request.request || + request.request.includes(`/${webViewTempDir}/`) + ) + // Continue resolving without changing anything with this plugin + return callback(); + + // Get the ?stuff aka the resource query on the request path (includes the ?) + let resourceQuery = request.query; + let requestPath = request.request; + // request.query sometimes doesn't have the ?stuff in it for some reason, so get it + // manually from the request path if it isn't already in request.query + if (!request.query) { + const queryInd = requestPath.lastIndexOf('?'); + // If there is a ? and something after it in the request path, use that as the resource + // query + if (queryInd >= 0 && queryInd < requestPath.length - 1) { + resourceQuery = requestPath.substring(queryInd); + requestPath = requestPath.substring(0, queryInd); + } + } + + // If it isn't calling for a webView, continue resolving without changing anything here + if (!webViewTsxRegex.test(requestPath)) return callback(); + + // Get the path to the relevant file in the temp dir + // Note: this path must keep the ./ at the start, or webpack won't resolve it correctly + let tempViewPath = getWebViewTempPath(requestPath, resolver.join); + // Add the query back onto the request path if it was originally there + if (!request.query) tempViewPath += resourceQuery; + + // Resolve this file but in the temp dir + resolver.doResolve( + target, + { + ...request, + request: tempViewPath, + }, + `Added temp dir to resolve request path: ${tempViewPath}`, + resolveContext, + callback, + ); + return undefined; + }, + ); + } +} + +// #endregion diff --git a/webpack/webpack.config.base.ts b/webpack/webpack.config.base.ts new file mode 100644 index 0000000..1e1e6ed --- /dev/null +++ b/webpack/webpack.config.base.ts @@ -0,0 +1,128 @@ +// #region shared with https://github.com/paranext/paranext-core/blob/main/extensions/webpack/webpack.config.base.ts + +import path from 'path'; +import TsconfigPathsPlugin from 'tsconfig-paths-webpack-plugin'; +import webpack from 'webpack'; + +const isDev = process.env.NODE_ENV !== 'production'; +const shouldGenerateSourceMaps = isDev || process.env.DEBUG_PROD; + +/** The base directory from which webpack should operate (should be the root repo folder) */ +export const rootDir = path.resolve(__dirname, '..'); + +/** + * The module format of library we want webpack to use for externals and create for our extensions + * + * @see webpack.Configuration['externalsType'] for info about external import format + * @see webpack.LibraryOptions['type'] for info about library format + */ +// commonjs-static formats the code to export everything on module.exports. so it works +// well in cjs or esm https://webpack.js.org/configuration/output/#type-commonjs-static +export const LIBRARY_TYPE: NonNullable = 'commonjs-static'; + +// Note: we do not want to do any chunking because neither webViews nor main can import dependencies +// other than those listed in configBase.externals. Each webView must contain all its dependency +// code, and main must contain all its dependency code. +/** webpack configuration shared by webView building and main building */ +const configBase: webpack.Configuration = { + // The operating directory for webpack instead of current working directory + context: rootDir, + mode: isDev ? 'development' : 'production', + // Bundle the sourcemap into the file since webviews are injected as strings into the main file + devtool: shouldGenerateSourceMaps ? 'inline-source-map' : false, + watchOptions: { + ignored: ['**/node_modules'], + }, + // Use require for externals as it is the only type of importing that Paranext supports + // https://webpack.js.org/configuration/externals/#externalstypecommonjs + externalsType: LIBRARY_TYPE, + // Modules that Paranext supplies to extensions https://webpack.js.org/configuration/externals/ + // All other dependencies must be bundled into the extension + externals: [ + 'react', + 'react/jsx-runtime', + 'react-dom', + 'react-dom/client', + 'papi-frontend', + 'papi-backend', + '@sillsdev/scripture', + ], + module: { + // Please keep these JSDocs up-to-date with their counterparts in `webpack-env.d.ts` + rules: [ + /** + * Import fully loaded and transformed files as strings with "./file?inline" + * + * WARNING: These files are NOT bundled. The rules are applied, but webpack does not bundle + * dependencies into these files before providing them, unfortunately. However, React WebView + * files are an exception as they are fully bundled. + */ + // This must be the first rule in order to be applied after all other transformations + // https://webpack.js.org/guides/asset-modules/#replacing-inline-loader-syntax + { + resourceQuery: /inline/, + type: 'asset/source', + }, + // Load TypeScript with SWC https://swc.rs/docs/usage/swc-loader + // If this seems to cause problems, you can try switching to ts-loader for more compatibility + // https://github.com/TypeStrong/ts-loader#options + { + test: /\.tsx?$/, + use: { + loader: 'swc-loader', + options: { + // Lots of configuration at https://swc.rs/docs/configuration/compilation - if building + // isn't working because of some error that looks like normal code, it may be something + // in swc isn't enabled. + // Found how to configure at https://stackoverflow.com/questions/76671009/how-to-properly-configure-swc-loader-with-webpack-when-switching-from-ts-loader + jsc: { + parser: { + syntax: 'typescript', + tsx: true, + decorators: true, + }, + }, + }, + }, + exclude: /node_modules/, + }, + /** + * Import scss, sass, and css files as strings + */ + // https://webpack.js.org/loaders/sass-loader/#getting-started + { + test: /\.(sa|sc|c)ss$/, + use: [ + // We are not using style-loader since we are passing styles to papi, not inserting them + // into dom. style-loader would add html style elements for our styles if we used it + // We are not using css-loader since we are getting style files using ?inline. css-loader + // would allow us to import CSS into CommonJS + // Compiles Sass to CSS + 'sass-loader', + ], + }, + /** + * Import files with no transformation as strings with "./file?raw" + */ + // This must be the last rule in order to be applied before all other transformations + // https://webpack.js.org/guides/asset-modules/#replacing-inline-loader-syntax + { + resourceQuery: /raw/, + type: 'asset/source', + }, + ], + }, + resolve: { + // If no file extension is provided on file path imports, use these extensions left-to-right + // https://webpack.js.org/guides/typescript/#basic-setup + extensions: ['.tsx', '.ts', '.js'], + plugins: [ + // use tsconfig.json paths https://www.npmjs.com/package/tsconfig-paths-webpack-plugin + new TsconfigPathsPlugin(), + ], + }, +}; + +export default configBase; + +// #endregion diff --git a/webpack/webpack.config.main.ts b/webpack/webpack.config.main.ts new file mode 100644 index 0000000..22291f3 --- /dev/null +++ b/webpack/webpack.config.main.ts @@ -0,0 +1,63 @@ +import webpack from 'webpack'; +import path from 'path'; +import merge from 'webpack-merge'; +import CopyPlugin from 'copy-webpack-plugin'; +import configBase, { LIBRARY_TYPE, rootDir } from './webpack.config.base'; +import WebViewResolveWebpackPlugin from './web-view-resolve-webpack-plugin'; +import { outputFolder } from './webpack.util'; + +/** webpack configuration for building main */ +const configMain: webpack.Configuration = merge(configBase, { + // #region shared with https://github.com/paranext/paranext-core/blob/main/extensions/webpack/webpack.config.main.ts + + // Build for node since Paranext loads this in node https://webpack.js.org/concepts/targets/ + target: 'node', + // configuration name + name: 'main', + // wait until webView bundling finishes - webpack.config.web-view.ts + dependencies: ['webView'], + // Instructions on what output to create + output: { + // extension output directory + path: path.resolve(rootDir, outputFolder), + // Exporting the library https://webpack.js.org/guides/author-libraries/#expose-the-library + library: { + type: LIBRARY_TYPE, + }, + // Empty the output folder before building + clean: true, + }, + resolve: { + plugins: [ + // Get web view files from the temp dir where they are built + new WebViewResolveWebpackPlugin(), + ], + }, + + // #endregion + + // extension main source file to build + // Note: this could have just been the import string if we put the filename in `output`, but + // splitting it out like this allows us to share `output` with `paranext-core`. + entry: { + main: { + import: './src/main.ts', + filename: 'paranext-extension-template.js', + }, + }, + plugins: [ + // Copy static files to the output folder https://webpack.js.org/plugins/copy-webpack-plugin/ + new CopyPlugin({ + patterns: [ + // We want all files from the public folder copied into the output folder + { from: 'public', to: './' }, + // Copy this extension's type declaration file into the output folder + { from: 'src/types/paranext-extension-template.d.ts', to: './' }, + // We need to distribute the package.json for Paranext to read the extension properly + { from: 'package.json', to: './' }, + ], + }), + ], +}); + +export default configMain; diff --git a/webpack/webpack.config.web-view.ts b/webpack/webpack.config.web-view.ts new file mode 100644 index 0000000..59122e6 --- /dev/null +++ b/webpack/webpack.config.web-view.ts @@ -0,0 +1,24 @@ +// #region shared with https://github.com/paranext/paranext-core/blob/main/extensions/webpack/webpack.config.web-view.ts + +import webpack from 'webpack'; +import merge from 'webpack-merge'; +import configBase, { rootDir } from './webpack.config.base'; +import { getWebViewEntries } from './webpack.util'; + +/** webpack configuration for building webViews */ +const configWebView: webpack.Configuration = merge(configBase, { + // Build for web since Paranext loads WebViews in browser https://webpack.js.org/concepts/targets/ + target: 'web', + // configuration name so we can depend on it in main + name: 'webView', + // instructions to build each extension webview source file + entry: getWebViewEntries, + output: { + // Build all the web views in the folders where they are with the temp dir appended + path: rootDir, + }, +}); + +export default configWebView; + +// #endregion diff --git a/webpack/webpack.util.ts b/webpack/webpack.util.ts new file mode 100644 index 0000000..ce819e9 --- /dev/null +++ b/webpack/webpack.util.ts @@ -0,0 +1,82 @@ +import webpack from 'webpack'; +import path from 'path'; +import { glob } from 'glob'; + +// #region shared with https://github.com/paranext/paranext-core/blob/main/extensions/webpack/webpack.util.ts + +/** + * String of what a web view needs to have in its name before the file extension to be considered a + * web-view + * + * Web Views should be named .web-view. + */ +const webViewTag = '.web-view'; +/** + * Glob filename matcher for React web views. + * React Web Views should be named .web-view.tsx + */ +const webViewTsxGlob = '**/*.web-view.tsx'; +/** + * Regex file name matcher for React web views. + * React Web Views should be named .web-view.tsx + * + * Note: this regex allows the extension to be optional. + */ +export const webViewTsxRegex = /.+\.web-view(\.[tj]sx)?$/; +/** Name of adjacent folder used to store bundled WebView files */ +export const webViewTempDir = 'temp-build'; + +/** Folder containing the built extension files */ +export const outputFolder = 'dist'; + +/** + * Get a list of TypeScript WebView files to bundle. + * Path relative to project root + */ +function getWebViewTsxPaths() { + return glob(webViewTsxGlob, { ignore: 'node_modules/**' }); +} + +/** + * Gets the bundled WebView path for a WebView file path + * @param webViewPath relative path to webView e.g. './src/extension-template.web-view.tsx' + * @param join function to use to join the paths together + * @returns WebView path with temporary WebView directory inserted into the module path + */ +export function getWebViewTempPath( + webViewPath: string, + join: (path: string, request: string) => string = path.join, +) { + const webViewInfo = path.parse(webViewPath); + + // If the web view doesn't have a file extension, parsing makes it think the extension is + // '.web-view', so we need to add it back + const webViewName = webViewInfo.ext === webViewTag ? webViewInfo.base : webViewInfo.name; + // Put transpiled WebViews in a temp folder in the same directory as the original WebView + // Make sure to preserve the ./ to indicate it is a relative path + return `${webViewPath.startsWith('./') ? './' : ''}${join( + webViewInfo.dir, + join(webViewTempDir, `${webViewName}.js`), + )}`; +} + +/** + * Get webpack entry configuration to build each web-view source file and put it in a temporary + * folder in the same directory + * @returns promise that resolves to the webView entry config + */ +export async function getWebViewEntries(): Promise { + const tsxWebViews = await getWebViewTsxPaths(); + const webViewEntries = Object.fromEntries( + tsxWebViews.map((webViewPath) => [ + webViewPath, + { + import: webViewPath, + filename: getWebViewTempPath(webViewPath), + } as webpack.EntryObject[string], + ]), + ); + return webViewEntries; +} + +// #endregion From be9cdb99d56c5451b323b4c63324984e9ddf9188 Mon Sep 17 00:00:00 2001 From: tombogle Date: Wed, 2 Aug 2023 08:29:33 -0400 Subject: [PATCH 58/61] Fixed name of types file in webpack.config.main.ts --- webpack/webpack.config.main.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webpack/webpack.config.main.ts b/webpack/webpack.config.main.ts index 22291f3..eac9eea 100644 --- a/webpack/webpack.config.main.ts +++ b/webpack/webpack.config.main.ts @@ -52,7 +52,7 @@ const configMain: webpack.Configuration = merge(configBase, { // We want all files from the public folder copied into the output folder { from: 'public', to: './' }, // Copy this extension's type declaration file into the output folder - { from: 'src/types/paranext-extension-template.d.ts', to: './' }, + { from: 'src/types/paranext-extension-sneeze-board.d.ts', to: './' }, // We need to distribute the package.json for Paranext to read the extension properly { from: 'package.json', to: './' }, ], From be40da0f090ccb7b480c3eb2a04135e51daebf4c Mon Sep 17 00:00:00 2001 From: tombogle Date: Thu, 3 Aug 2023 00:47:33 -0400 Subject: [PATCH 59/61] Removed the unsubscriber-related code. This is a follow-on to the previous merge, since the main.ts files in the template and in the sneeze board are so different that normal conflict resolution is impossible. I'm 99% sure that we are no longer sup[posed to return the unsubscriber (line 193) and I can see that the import of UnsubscriberAsync is no longer done in the template. But I'm not sure that ripping all this code is the correct thing to do because I don't understand how unsubscribing is supposed to work now. --- src/main.ts | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/main.ts b/src/main.ts index 4fdd9a0..d65dd46 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,5 +1,4 @@ import papi from 'papi-backend'; -import { UnsubscriberAsync } from 'shared/utils/papi-util'; import type IDataProviderEngine from 'shared/models/data-provider-engine.model'; import { AchYouDataTypes } from 'paranext-extension-sneeze-board'; import sneezeBoardWebView from './sneeze-board.web-view?inline'; @@ -17,8 +16,6 @@ const { logger.info('Sneeze Board is importing!'); -const unsubscribers: UnsubscriberAsync[] = []; - // TODO: Change date to have a Date type once JSON gets parsed to a Date type export type SerializedSneeze = { userId: string; date: string; comment?: string }; export type Sneeze = SerializedSneeze & { sneezeId: number }; @@ -183,14 +180,7 @@ export async function activate() { // hold everything else up const sneezeBoardWebViewProviderResolved = await sneezeBoardWebViewProviderPromise; - const combinedUnsubscriber: UnsubscriberAsync = papi.util.aggregateUnsubscriberAsyncs( - (await Promise.all(unsubPromises)).concat([ - sneezeDataProvider.dispose, - sneezeBoardWebViewProviderResolved.dispose, - ]), - ); logger.info('The Sneeze Board is finished activating!'); - return combinedUnsubscriber; } export async function deactivate() { From bd934ac7d8cd038e624b5e1205715b249b0a17c5 Mon Sep 17 00:00:00 2001 From: tombogle Date: Thu, 3 Aug 2023 10:51:06 -0400 Subject: [PATCH 60/61] Fixed problem with sneeze board and added unsubscribers to context.registrations --- package-lock.json | 1 - src/main.ts | 18 ++++++++---------- webpack/webpack.config.main.ts | 2 +- 3 files changed, 9 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index f6d2f26..392ad4f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -45,7 +45,6 @@ "hasInstallScript": true, "license": "MIT", "devDependencies": { - "@mui/icons-material": "^5.13.7", "@senojs/rollup-plugin-style-inject": "^0.2.3", "@types/react": "^18.2.15", "@types/react-dom": "^18.2.7", diff --git a/src/main.ts b/src/main.ts index d65dd46..e5810b2 100644 --- a/src/main.ts +++ b/src/main.ts @@ -8,6 +8,7 @@ import type { SavedWebViewDefinition, WebViewDefinition } from 'shared/data/web- // TODO: Update the json file with the latest date from Darren (xml that needs to be run through a // json converter online and have accessors renamed to userId, date, and comment) import blessYouData from './sneeze-board.data.json'; +import { ExecutionActivationContext } from 'extension-host/extension-types/extension-activation-context.model'; const { logger, @@ -141,7 +142,7 @@ const sneezeBoardWebViewProvider: IWebViewProvider = { }, }; -export async function activate() { +export async function activate(context: ExecutionActivationContext) { logger.info('Sneeze Board is activating!'); const sneezeDataProvider = await papi.dataProvider.registerEngine( @@ -154,11 +155,10 @@ export async function activate() { sneezeBoardWebViewProvider, ); - const unsubPromises = [ + const getSneezesPromise = papi.commands.registerCommand('sneezeBoard.getSneezes', () => { return sneezeDataProvider.getSneeze('*'); - }), - ]; + }); // Create a webview or get an existing webview if one already exists for this type // Note: here, we are using `existingId: '?'` to indicate we do not want to create a new webview @@ -173,16 +173,14 @@ export async function activate() { (timSneeze: Sneeze[]) => logger.info(`Tim sneezed the ${timSneeze[timSneeze.length - 1].sneezeId} sneeze`), ); - unsubscribers.push(unsubGreetings); + context.registrations.add(unsubGreetings); } // For now, let's just make things easy and await the registration promises at the end so we don't // hold everything else up - const sneezeBoardWebViewProviderResolved = await sneezeBoardWebViewProviderPromise; + context.registrations.add (await sneezeBoardWebViewProviderPromise); + context.registrations.add (await getSneezesPromise); + context.registrations.add (sneezeDataProvider); logger.info('The Sneeze Board is finished activating!'); } - -export async function deactivate() { - return Promise.all(unsubscribers.map((unsubscriber) => unsubscriber())); -} diff --git a/webpack/webpack.config.main.ts b/webpack/webpack.config.main.ts index eac9eea..b712c4f 100644 --- a/webpack/webpack.config.main.ts +++ b/webpack/webpack.config.main.ts @@ -42,7 +42,7 @@ const configMain: webpack.Configuration = merge(configBase, { entry: { main: { import: './src/main.ts', - filename: 'paranext-extension-template.js', + filename: 'paranext-extension-sneeze-board.js', }, }, plugins: [ From e35360ff540c5b6c5ba8237c505aa17f056cb155 Mon Sep 17 00:00:00 2001 From: tombogle Date: Fri, 4 Aug 2023 10:39:30 -0400 Subject: [PATCH 61/61] Removed an asset file that came in from the template but is not needed in the sneeze board. Also changed a comment to better explain the code that registers with PAPI the things that need to be unsubscribed when shutting down. --- public/assets/heresy-warning.txt | 1 - src/main.ts | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) delete mode 100644 public/assets/heresy-warning.txt diff --git a/public/assets/heresy-warning.txt b/public/assets/heresy-warning.txt deleted file mode 100644 index 107f3e2..0000000 --- a/public/assets/heresy-warning.txt +++ /dev/null @@ -1 +0,0 @@ -Heresy count: diff --git a/src/main.ts b/src/main.ts index e5810b2..71eace0 100644 --- a/src/main.ts +++ b/src/main.ts @@ -176,8 +176,8 @@ export async function activate(context: ExecutionActivationContext) { context.registrations.add(unsubGreetings); } - // For now, let's just make things easy and await the registration promises at the end so we don't - // hold everything else up + // Tell PAPI all the things that need to be unsubscribed when shutting down (or otherwise + // removing this extension). context.registrations.add (await sneezeBoardWebViewProviderPromise); context.registrations.add (await getSneezesPromise); context.registrations.add (sneezeDataProvider);