From 25316d9c1edc94829c2d7452ee75cb572fdf5298 Mon Sep 17 00:00:00 2001 From: Bar Saar Date: Wed, 24 Jul 2024 17:17:17 +0300 Subject: [PATCH] update mixin for web components --- packages/libs/sdk-mixins/src/index.ts | 4 +- .../src/mixins/themeMixin/themeMixin.ts | 11 +- packages/sdks/web-component/package.json | 2 + .../src/lib/descope-wc/BaseDescopeWc.ts | 364 +--- .../src/lib/descope-wc/DescopeWc.ts | 49 +- .../src/lib/mixins/formMountMixin.ts | 31 + .../web-component/src/lib/mixins/index.ts | 1 + .../web-component/test/descope-wc.test.ts | 18 +- packages/web-component/package-lock.json | 1718 +++++++++++++++++ 9 files changed, 1840 insertions(+), 358 deletions(-) create mode 100644 packages/sdks/web-component/src/lib/mixins/formMountMixin.ts create mode 100644 packages/sdks/web-component/src/lib/mixins/index.ts create mode 100644 packages/web-component/package-lock.json diff --git a/packages/libs/sdk-mixins/src/index.ts b/packages/libs/sdk-mixins/src/index.ts index 0a0238cda..47b6b524a 100644 --- a/packages/libs/sdk-mixins/src/index.ts +++ b/packages/libs/sdk-mixins/src/index.ts @@ -1,11 +1,11 @@ declare global { interface HTMLElement { - attributeChangedCallback( + attributeChangedCallback?( attrName: string, oldValue: string | null, newValue: string | null, ): void; - connectedCallback(): void; + connectedCallback?(): void; } } diff --git a/packages/libs/sdk-mixins/src/mixins/themeMixin/themeMixin.ts b/packages/libs/sdk-mixins/src/mixins/themeMixin/themeMixin.ts index b7f5f947d..1add9a0c2 100644 --- a/packages/libs/sdk-mixins/src/mixins/themeMixin/themeMixin.ts +++ b/packages/libs/sdk-mixins/src/mixins/themeMixin/themeMixin.ts @@ -46,8 +46,8 @@ export const themeMixin = createSingletonMixin( return theme || 'light'; } - get styleName(): string { - return this.getAttribute('style-name') || THEME_DEFAULT_NAME; + get styleId(): string { + return this.getAttribute('style-id') || THEME_DEFAULT_NAME; } #_themeResource: Promise>; @@ -55,7 +55,7 @@ export const themeMixin = createSingletonMixin( async #fetchTheme() { try { const { body: fetchedTheme } = await this.fetchStaticResource( - `${this.styleName}.json`, + `${this.styleId}.json`, 'json', ); @@ -174,6 +174,11 @@ export const themeMixin = createSingletonMixin( this.#loadFonts(); this.#applyTheme(); }); + + this.observeAttributes(['style-id'], () => { + this.#_themeResource = null; + this.#loadComponentsStyle(); + }); } }; }, diff --git a/packages/sdks/web-component/package.json b/packages/sdks/web-component/package.json index 24187ebe5..3f48e0fad 100644 --- a/packages/sdks/web-component/package.json +++ b/packages/sdks/web-component/package.json @@ -74,6 +74,8 @@ }, "dependencies": { "tslib": "2.6.3", + "@descope/sdk-helpers": "workspace:*", + "@descope/sdk-mixins": "workspace:*", "@descope/web-js-sdk": "workspace:*" }, "overrides": { diff --git a/packages/sdks/web-component/src/lib/descope-wc/BaseDescopeWc.ts b/packages/sdks/web-component/src/lib/descope-wc/BaseDescopeWc.ts index 44c4c63db..3fef8f4c1 100644 --- a/packages/sdks/web-component/src/lib/descope-wc/BaseDescopeWc.ts +++ b/packages/sdks/web-component/src/lib/descope-wc/BaseDescopeWc.ts @@ -1,12 +1,10 @@ import createSdk from '@descope/web-js-sdk'; +import { themeMixin } from '@descope/sdk-mixins'; +import { compose } from '@descope/sdk-helpers'; import { CONFIG_FILENAME, ELEMENTS_TO_IGNORE_ENTER_KEY_ON, PREV_VER_ASSETS_FOLDER, - THEME_DEFAULT_NAME, - UI_COMPONENTS_FALLBACK_URL, - UI_COMPONENTS_URL, - UI_COMPONENTS_URL_VERSION_PLACEHOLDER, } from '../constants'; import { camelCase, @@ -15,12 +13,11 @@ import { getContentUrl, getRunIdsFromUrl, handleUrlParams, - isChromium, - loadFont, State, withMemCache, } from '../helpers'; import { IsChanged } from '../helpers/state'; +import { formMountMixin } from './../mixins'; import { AutoFocusOptions, DebuggerMessage, @@ -29,7 +26,6 @@ import { FlowStateUpdateFn, ILogger, SdkConfig, - ThemeOptions, DescopeUI, ProjectConfiguration, FlowConfig, @@ -43,8 +39,10 @@ import { // this is replaced in build time declare const BUILD_VERSION: string; +const BaseClass = compose(themeMixin, formMountMixin)(HTMLElement); + // this base class is responsible for WC initialization -class BaseDescopeWc extends HTMLElement { +class BaseDescopeWc extends BaseClass { logger: ILogger = console; static get observedAttributes() { @@ -53,7 +51,6 @@ class BaseDescopeWc extends HTMLElement { 'flow-id', 'base-url', 'tenant', - 'theme', 'locale', 'debug', 'storage-prefix', @@ -63,7 +60,7 @@ class BaseDescopeWc extends HTMLElement { 'store-last-authenticated-user', 'keep-last-authenticated-user-after-logout', 'validate-on-blur', - 'style-name', + 'style-id', ]; } @@ -128,34 +125,13 @@ class BaseDescopeWc extends HTMLElement { } #initShadowDom() { - this.attachShadow({ mode: 'open' }); + //this.attachShadow({ mode: 'open' }); this.shadowRoot.appendChild(initTemplate.content.cloneNode(true)); this.rootElement = this.shadowRoot.querySelector('#wc-root'); } - #shouldMountInFormEle() { - const wc = this.shadowRoot.host; - return !wc.closest('form') && isChromium(); - } - - // we want to make sure the web-component is wrapped with on outer form element - // this is needed in order to support webauthn conditional UI (which currently supported only in Chrome when input is inside a web-component) - // for more info see here: https://github.com/descope/etc/issues/733 - #handleOuterForm() { - const wc = this.shadowRoot.host; - const form = document.createElement('form'); - form.style.width = '100%'; - form.style.height = '100%'; - wc.parentElement.appendChild(form); - form.appendChild(wc); - } - - get projectId() { - return this.getAttribute('project-id'); - } - get flowId() { return this.getAttribute('flow-id'); } @@ -171,14 +147,6 @@ class BaseDescopeWc extends HTMLElement { } } - get baseUrl() { - return this.getAttribute('base-url') || undefined; - } - - get baseStaticUrl() { - return this.getAttribute('base-static-url'); - } - get tenant() { return this.getAttribute('tenant') || undefined; } @@ -195,23 +163,6 @@ class BaseDescopeWc extends HTMLElement { return this.getAttribute('locale') || undefined; } - get theme(): ThemeOptions { - const theme = this.getAttribute('theme') as ThemeOptions; - - if (theme === 'os') { - const isOsDark = - window.matchMedia && - window.matchMedia?.('(prefers-color-scheme: dark)')?.matches; - return isOsDark ? 'dark' : 'light'; - } - - return theme || 'light'; - } - - get styleName(): string { - return this.getAttribute('style-name') || THEME_DEFAULT_NAME; - } - get autoFocus(): AutoFocusOptions { const res = this.getAttribute('auto-focus') ?? 'true'; if (res === 'skipFirstScreen') { @@ -258,7 +209,6 @@ class BaseDescopeWc extends HTMLElement { const optionalAttributes = [ 'base-url', 'tenant', - 'theme', 'locale', 'debug', 'redirect-url', @@ -270,19 +220,13 @@ class BaseDescopeWc extends HTMLElement { 'form', 'client', 'validate-on-blur', - 'style-name', + 'style-id', ]; BaseDescopeWc.observedAttributes.forEach((attr: string) => { if (!optionalAttributes.includes(attr) && !this[camelCase(attr)]) throw Error(`${attr} cannot be empty`); }); - - if (this.theme && this.theme !== 'light' && this.theme !== 'dark') { - throw Error( - 'Supported theme values are "light", "dark", or leave empty for using the OS theme', - ); - } } #syncStateIdFromUrl() { @@ -379,77 +323,10 @@ class BaseDescopeWc extends HTMLElement { } }); - async #fetchTheme() { - const themeUrl = getContentUrl({ - projectId: this.projectId, - filename: `${this.styleName}.json`, - baseUrl: this.baseStaticUrl, - }); - try { - const { body } = await fetchContent(themeUrl, 'json'); - - return body; - } catch (e) { - this.loggerWrapper.error( - 'Cannot fetch theme file', - 'make sure that your projectId & flowId are correct', - ); - - return undefined; - } - } - - #theme: Promise>; - - async #loadFonts() { - const { projectConfig } = await this.#getConfig(); - const fonts = projectConfig?.cssTemplate?.[this.theme]?.fonts; - // eslint-disable-next-line @typescript-eslint/no-unused-expressions - fonts && - Object.values(fonts).forEach((font: Record) => - loadFont(font.url), - ); - } - - async #handleTheme() { - await this.#loadTheme(); - await this.#applyTheme(); - } - - async #loadTheme() { - const styleEle = document.createElement('style'); - const theme = await this.#theme; - - styleEle.innerText = - (theme?.light?.globals || '') + (theme?.dark?.globals || ''); - - const descopeUi = await BaseDescopeWc.descopeUI; - - if ( - descopeUi?.componentsThemeManager && - !descopeUi.componentsThemeManager.hasThemes - ) { - descopeUi.componentsThemeManager.themes = { - light: theme?.light?.components, - dark: theme?.dark?.components, - }; - } - - this.shadowRoot.appendChild(styleEle); - } - #handleComponentsContext(e: CustomEvent) { this.#componentsContext = { ...this.#componentsContext, ...e.detail }; } - async #applyTheme() { - this.rootElement.setAttribute('data-theme', this.theme); - const descopeUi = await BaseDescopeWc.descopeUI; - if (descopeUi?.componentsThemeManager) { - descopeUi.componentsThemeManager.currentThemeName = this.theme; - } - } - async getExecutionContext() { const { executionContext } = await this.#getConfig(); @@ -584,173 +461,78 @@ class BaseDescopeWc extends HTMLElement { static descopeUI: any; - async #loadDescopeUI() { - if (BaseDescopeWc.descopeUI) { - this.loggerWrapper.debug( - 'DescopeUI is already loading, probably multiple flows are running on the same page', - ); - return; - } - - BaseDescopeWc.descopeUI = new Promise((resolve) => { - if (globalThis.DescopeUI) { - resolve(globalThis.DescopeUI); - return; - } + async init() { + await super.init?.(); + this.#debugState.subscribe(this.#handleDebugMode.bind(this)); + this.#debugState.update({ isDebug: this.debug }); - const setupScript = (url: string) => { - const scriptEle = document.createElement('script'); - scriptEle.id = 'load-descope-ui'; - scriptEle.src = url; + this.#validateAttrs(); - return scriptEle; - }; - - const generateScriptUrl = ( - urlTemplate: string, - componentsVersion: string, - ) => - urlTemplate.replace( - UI_COMPONENTS_URL_VERSION_PLACEHOLDER, - componentsVersion, - ); + if (await this.#getIsFlowsVersionMismatch()) { + this.loggerWrapper.error( + 'This SDK version does not support your flows version', + 'Make sure to upgrade your flows to the latest version or use an older SDK version', + ); - const attachEvents = ( - scriptEle: HTMLScriptElement, - onError: () => void, - ) => { - const onErrorInternal = () => { - this.loggerWrapper.error( - 'Cannot load DescopeUI', - `Make sure this URL is valid and return the correct script: "${scriptEle.src}"`, - ); - - onError(); - }; + return; + } - scriptEle.addEventListener('load', () => { - if (!globalThis.DescopeUI) onErrorInternal(); - resolve(globalThis.DescopeUI); - }); + if ((await this.#getConfig()).isMissingConfig) { + this.loggerWrapper.error( + 'Cannot get config file', + 'Make sure that your projectId & flowId are correct', + ); - scriptEle.addEventListener('error', onErrorInternal); - }; + return; + } - (async () => { - const componentsVersion = await this.#getComponentsVersion(); - const scriptEle = setupScript( - generateScriptUrl(UI_COMPONENTS_URL, componentsVersion), - ); + this.#handleKeyPress(); + + const { + executionId, + stepId, + token, + code, + exchangeError, + redirectAuthCallbackUrl, + redirectAuthBackupCallbackUri, + redirectAuthCodeChallenge, + redirectAuthInitiator, + ssoQueryParams, + } = handleUrlParams(); + + // we want to update the state when user clicks on back in the browser + window.addEventListener('popstate', this.#eventsCbRefs.popstate); + + // adding event to listen to events coming from components (e.g. recaptcha risk token) that want to add data to the context + // this data will be sent to the server on the next request + window.addEventListener( + 'components-context', + this.#eventsCbRefs.componentsContext, + ); - // if we cannot load descope UI, we want to try from a fallback url - const onError = () => { - scriptEle.remove(); - - this.loggerWrapper.info( - 'Trying to load DescopeUI from a fallback URL', - ); - - const fallbackScriptEle = setupScript( - generateScriptUrl(UI_COMPONENTS_FALLBACK_URL, componentsVersion), - ); - attachEvents(fallbackScriptEle, () => { - resolve(undefined); - }); - document.body.append(fallbackScriptEle); - }; + this.#flowState.subscribe(this.#onFlowChange.bind(this)); - attachEvents(scriptEle, onError); - document.body.append(scriptEle); - })(); + this.#flowState.update({ + projectId: this.projectId, + flowId: this.flowId, + baseUrl: this.baseUrl, + tenant: this.tenant, + redirectUrl: this.redirectUrl, + locale: this.locale, + stepId, + executionId, + token, + code, + exchangeError, + redirectAuthCallbackUrl, + redirectAuthBackupCallbackUri, + redirectAuthCodeChallenge, + redirectAuthInitiator, + ...ssoQueryParams, }); - } - async connectedCallback() { - if (this.shadowRoot.isConnected) { - this.#debugState.subscribe(this.#handleDebugMode.bind(this)); - this.#debugState.update({ isDebug: this.debug }); - - if (this.#shouldMountInFormEle()) { - this.#handleOuterForm(); - return; - } - - this.#validateAttrs(); - - this.#theme = this.#fetchTheme(); - - if (await this.#getIsFlowsVersionMismatch()) { - this.loggerWrapper.error( - 'This SDK version does not support your flows version', - 'Make sure to upgrade your flows to the latest version or use an older SDK version', - ); - - return; - } - - if ((await this.#getConfig()).isMissingConfig) { - this.loggerWrapper.error( - 'Cannot get config file', - 'Make sure that your projectId & flowId are correct', - ); - - return; - } - - this.#loadFonts(); - - await this.#loadDescopeUI(); - - await this.#handleTheme(); - - this.#handleKeyPress(); - - const { - executionId, - stepId, - token, - code, - exchangeError, - redirectAuthCallbackUrl, - redirectAuthBackupCallbackUri, - redirectAuthCodeChallenge, - redirectAuthInitiator, - ssoQueryParams - } = handleUrlParams(); - - // we want to update the state when user clicks on back in the browser - window.addEventListener('popstate', this.#eventsCbRefs.popstate); - - // adding event to listen to events coming from components (e.g. recaptcha risk token) that want to add data to the context - // this data will be sent to the server on the next request - window.addEventListener( - 'components-context', - this.#eventsCbRefs.componentsContext, - ); - - this.#flowState.subscribe(this.#onFlowChange.bind(this)); - - this.#flowState.update({ - projectId: this.projectId, - flowId: this.flowId, - baseUrl: this.baseUrl, - tenant: this.tenant, - redirectUrl: this.redirectUrl, - locale: this.locale, - stepId, - executionId, - token, - code, - exchangeError, - redirectAuthCallbackUrl, - redirectAuthBackupCallbackUri, - redirectAuthCodeChallenge, - redirectAuthInitiator, - ...ssoQueryParams, - }); - - this.#init = true; - } + this.#init = true; } disconnectedCallback() { @@ -798,10 +580,6 @@ class BaseDescopeWc extends HTMLElement { }); this.#debugState.update({ isDebug: this.debug }); - - if (attrName === 'theme') { - this.#applyTheme(); - } } } } diff --git a/packages/sdks/web-component/src/lib/descope-wc/DescopeWc.ts b/packages/sdks/web-component/src/lib/descope-wc/DescopeWc.ts index 67d7a9708..cd64caaf1 100644 --- a/packages/sdks/web-component/src/lib/descope-wc/DescopeWc.ts +++ b/packages/sdks/web-component/src/lib/descope-wc/DescopeWc.ts @@ -121,7 +121,7 @@ class DescopeWc extends BaseDescopeWc { }); } - async connectedCallback() { + async init() { if (this.shadowRoot.isConnected) { this.flowState?.subscribe(this.onFlowChange.bind(this)); this.stepState?.subscribe(this.onStepChange.bind(this)); @@ -131,7 +131,7 @@ class DescopeWc extends BaseDescopeWc { this.#eventsCbRefs.visibilitychange, ); } - await super.connectedCallback(); + await super.init?.(); } disconnectedCallback() { @@ -782,47 +782,6 @@ class DescopeWc extends BaseDescopeWc { } } - async loadDescopeUiComponents(clone: DocumentFragment) { - const descopeUI = await BaseDescopeWc.descopeUI; - if (!descopeUI) return; - - const descopeUiComponentsList = getDescopeUiComponentsList(clone); - - await Promise.all( - descopeUiComponentsList.map(async (tag) => { - const isComponentAlreadyDefined = !!customElements.get(tag); - - if (isComponentAlreadyDefined) return undefined; - - if (!descopeUI[tag]) { - this.loggerWrapper.error( - `Cannot load UI component "${tag}"`, - `Descope UI does not have a component named "${tag}", available components are: "${Object.keys( - descopeUI, - ).join(', ')}"`, - ); - return undefined; - } - try { - // eslint-disable-next-line @typescript-eslint/return-await - return await descopeUI[tag](); - } catch (e) { - // this error is thrown when trying to register a component which is already registered - // when running 2 flows on the same page, it might happen that the register fn is called twice - // in case it happens, we are silently ignore the error - if (e.name === 'NotSupportedError') { - // eslint-disable-next-line no-console - console.debug(`${tag} is already registered`); - } else { - throw e; - } - } - - return undefined; - }), - ); - } - async onStepChange(currentState: StepState, prevState: StepState) { const { htmlUrl, @@ -838,9 +797,7 @@ class DescopeWc extends BaseDescopeWc { const clone = stepTemplate.content.cloneNode(true) as DocumentFragment; - const loadDescopeUiComponents = this.loadDescopeUiComponents( - stepTemplate.content, - ); + const loadDescopeUiComponents = this.loadDescopeUiComponents(stepTemplate); // we want to disable the webauthn buttons if it's not supported on the browser if (!this.sdk.webauthn.helpers.isSupported()) { diff --git a/packages/sdks/web-component/src/lib/mixins/formMountMixin.ts b/packages/sdks/web-component/src/lib/mixins/formMountMixin.ts new file mode 100644 index 000000000..37b13d6d0 --- /dev/null +++ b/packages/sdks/web-component/src/lib/mixins/formMountMixin.ts @@ -0,0 +1,31 @@ +import { createSingletonMixin } from '@descope/sdk-helpers'; +import { isChromium } from '../helpers'; + +export const formMountMixin = createSingletonMixin( + (superclass: T) => + class FormMountMixin extends superclass { + #shouldMountInFormEle() { + const wc = this.shadowRoot.host; + return !wc.closest('form') && isChromium(); + } + + // we want to make sure the web-component is wrapped with on outer form element + // this is needed in order to support webauthn conditional UI (which currently supported only in Chrome when input is inside a web-component) + // for more info see here: https://github.com/descope/etc/issues/733 + #handleOuterForm() { + const wc = this.shadowRoot.host; + const form = document.createElement('form'); + form.style.width = '100%'; + form.style.height = '100%'; + wc.parentElement.appendChild(form); + form.appendChild(wc); + } + + connectedCallback() { + if (this.#shouldMountInFormEle()) { + this.#handleOuterForm(); + } + super.connectedCallback?.(); + } + }, +); diff --git a/packages/sdks/web-component/src/lib/mixins/index.ts b/packages/sdks/web-component/src/lib/mixins/index.ts new file mode 100644 index 000000000..d3c7297ad --- /dev/null +++ b/packages/sdks/web-component/src/lib/mixins/index.ts @@ -0,0 +1 @@ +export * from './formMountMixin'; diff --git a/packages/sdks/web-component/test/descope-wc.test.ts b/packages/sdks/web-component/test/descope-wc.test.ts index 222b3e95b..372d6c40c 100644 --- a/packages/sdks/web-component/test/descope-wc.test.ts +++ b/packages/sdks/web-component/test/descope-wc.test.ts @@ -421,7 +421,7 @@ describe('web-component', () => { pageContent = 'It works!'; - document.body.innerHTML = `

Custom element test

`; + document.body.innerHTML = `

Custom element test

`; await waitFor(() => screen.getByShadowText('It works!'), { timeout: WAIT_TIMEOUT, @@ -504,10 +504,7 @@ describe('web-component', () => { }); } - // eslint-disable-next-line class-methods-use-this - public get projectId() { - return '1'; - } + projectId: '1'; } customElements.define('test-flow', Test); const descope = new Test(); @@ -1765,20 +1762,13 @@ describe('web-component', () => { }); } - // eslint-disable-next-line class-methods-use-this - public get projectId() { - return '1'; - } + projectId: '1'; + theme: any = '1'; // eslint-disable-next-line class-methods-use-this public get flowId() { return '1'; } - - // eslint-disable-next-line class-methods-use-this - public get theme() { - return '1' as any; - } } customElements.define('test-theme', Test); diff --git a/packages/web-component/package-lock.json b/packages/web-component/package-lock.json new file mode 100644 index 000000000..3a5787d0e --- /dev/null +++ b/packages/web-component/package-lock.json @@ -0,0 +1,1718 @@ +{ + "name": "web-component", + "lockfileVersion": 3, + "requires": true, + "packages": { + "../../node_modules/.pnpm/@open-wc+rollup-plugin-html@1.2.5/node_modules/@open-wc/rollup-plugin-html": { + "version": "1.2.5", + "extraneous": true, + "license": "MIT", + "dependencies": { + "@open-wc/building-utils": "^2.18.3", + "@types/html-minifier": "^3.5.3", + "fs-extra": "^8.1.0", + "glob": "^7.1.3", + "html-minifier-terser": "^5.1.1", + "parse5": "^5.1.1" + } + }, + "../../node_modules/.pnpm/@rollup+plugin-commonjs@26.0.1_rollup@3.29.4/node_modules/@rollup/plugin-commonjs": { + "version": "26.0.1", + "extraneous": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "commondir": "^1.0.1", + "estree-walker": "^2.0.2", + "glob": "^10.4.1", + "is-reference": "1.2.1", + "magic-string": "^0.30.3" + }, + "devDependencies": { + "@rollup/plugin-json": "^5.0.0", + "@rollup/plugin-node-resolve": "^15.0.0", + "locate-character": "^2.0.5", + "require-relative": "^0.8.7", + "rollup": "^4.0.0-24", + "source-map": "^0.7.4", + "source-map-support": "^0.5.21", + "typescript": "^4.8.3" + }, + "engines": { + "node": ">=16.0.0 || 14 >= 14.17" + }, + "peerDependencies": { + "rollup": "^2.68.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "../../node_modules/.pnpm/@rollup+plugin-commonjs@26.0.1_rollup@4.13.0/node_modules/@rollup/plugin-commonjs": { + "version": "26.0.1", + "extraneous": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "commondir": "^1.0.1", + "estree-walker": "^2.0.2", + "glob": "^10.4.1", + "is-reference": "1.2.1", + "magic-string": "^0.30.3" + }, + "devDependencies": { + "@rollup/plugin-json": "^5.0.0", + "@rollup/plugin-node-resolve": "^15.0.0", + "locate-character": "^2.0.5", + "require-relative": "^0.8.7", + "rollup": "^4.0.0-24", + "source-map": "^0.7.4", + "source-map-support": "^0.5.21", + "typescript": "^4.8.3" + }, + "engines": { + "node": ">=16.0.0 || 14 >= 14.17" + }, + "peerDependencies": { + "rollup": "^2.68.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "../../node_modules/.pnpm/@rollup+plugin-node-resolve@15.0.2_rollup@3.29.4/node_modules/@rollup/plugin-node-resolve": { + "version": "15.0.2", + "extraneous": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.2.1", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "devDependencies": { + "@babel/core": "^7.19.1", + "@babel/plugin-transform-typescript": "^7.10.5", + "@rollup/plugin-babel": "^6.0.0", + "@rollup/plugin-commonjs": "^23.0.0", + "@rollup/plugin-json": "^5.0.0", + "es5-ext": "^0.10.62", + "rollup": "^3.2.3", + "source-map": "^0.7.4", + "string-capitalize": "^1.0.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "../../node_modules/.pnpm/@rollup+plugin-node-resolve@15.0.2_rollup@4.13.0/node_modules/@rollup/plugin-node-resolve": { + "version": "15.0.2", + "extraneous": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.2.1", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "devDependencies": { + "@babel/core": "^7.19.1", + "@babel/plugin-transform-typescript": "^7.10.5", + "@rollup/plugin-babel": "^6.0.0", + "@rollup/plugin-commonjs": "^23.0.0", + "@rollup/plugin-json": "^5.0.0", + "es5-ext": "^0.10.62", + "rollup": "^3.2.3", + "source-map": "^0.7.4", + "string-capitalize": "^1.0.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "../../node_modules/.pnpm/@rollup+plugin-replace@5.0.2_rollup@3.29.4/node_modules/@rollup/plugin-replace": { + "version": "5.0.2", + "extraneous": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "magic-string": "^0.27.0" + }, + "devDependencies": { + "@rollup/plugin-buble": "^1.0.0", + "del-cli": "^5.0.0", + "locate-character": "^2.0.5", + "rollup": "^3.2.3", + "source-map": "^0.7.4", + "typescript": "^4.8.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "../../node_modules/.pnpm/@rollup+plugin-replace@5.0.2_rollup@4.13.0/node_modules/@rollup/plugin-replace": { + "version": "5.0.2", + "extraneous": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "magic-string": "^0.27.0" + }, + "devDependencies": { + "@rollup/plugin-buble": "^1.0.0", + "del-cli": "^5.0.0", + "locate-character": "^2.0.5", + "rollup": "^3.2.3", + "source-map": "^0.7.4", + "typescript": "^4.8.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "../../node_modules/.pnpm/@rollup+plugin-terser@0.4.1_rollup@4.13.0/node_modules/@rollup/plugin-terser": { + "version": "0.4.1", + "extraneous": true, + "license": "MIT", + "dependencies": { + "serialize-javascript": "^6.0.0", + "smob": "^0.0.6", + "terser": "^5.15.1" + }, + "devDependencies": { + "@types/serialize-javascript": "^5.0.2", + "rollup": "^3.0.0-7", + "typescript": "^4.8.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.x || ^3.x" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "../../node_modules/.pnpm/@rollup+plugin-typescript@11.1.0_rollup@4.13.0_tslib@2.6.3_typescript@4.9.5/node_modules/@rollup/plugin-typescript": { + "version": "11.1.0", + "extraneous": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "resolve": "^1.22.1" + }, + "devDependencies": { + "@rollup/plugin-buble": "^1.0.0", + "@rollup/plugin-commonjs": "^23.0.0", + "@types/node": "^14.18.30", + "@types/resolve": "^1.20.2", + "buble": "^0.20.0", + "rollup": "^3.2.3", + "typescript": "^4.8.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.14.0||^3.0.0", + "tslib": "*", + "typescript": ">=3.7.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + }, + "tslib": { + "optional": true + } + } + }, + "../../node_modules/.pnpm/@testing-library+dom@10.1.0/node_modules/@testing-library/dom": { + "version": "10.1.0", + "extraneous": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "devDependencies": { + "@testing-library/jest-dom": "^5.11.6", + "browserslist": "4.21.8", + "caniuse-lite": "1.0.30001502", + "jest-in-case": "^1.0.2", + "jest-snapshot-serializer-ansi": "^1.0.0", + "jest-watch-select-projects": "^2.0.0", + "jsdom": "20.0.0", + "kcd-scripts": "^13.0.0", + "typescript": "^4.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "../../node_modules/.pnpm/@types+js-cookie@3.0.3/node_modules/@types/js-cookie": { + "version": "3.0.3", + "extraneous": true, + "license": "MIT" + }, + "../../node_modules/.pnpm/@types+testing-library__jest-dom@5.14.9/node_modules/@types/testing-library__jest-dom": { + "version": "5.14.9", + "extraneous": true, + "license": "MIT", + "dependencies": { + "@types/jest": "*" + } + }, + "../../node_modules/.pnpm/@typescript-eslint+parser@7.2.0_eslint@8.57.0_typescript@4.9.5/node_modules/@typescript-eslint/parser": { + "version": "7.2.0", + "extraneous": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "7.2.0", + "@typescript-eslint/types": "7.2.0", + "@typescript-eslint/typescript-estree": "7.2.0", + "@typescript-eslint/visitor-keys": "7.2.0", + "debug": "^4.3.4" + }, + "devDependencies": { + "@types/glob": "*", + "downlevel-dts": "*", + "glob": "*", + "jest": "29.7.0", + "prettier": "^3.0.3", + "rimraf": "*", + "typescript": "*" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "../../node_modules/.pnpm/esbuild@0.21.4/node_modules/esbuild": { + "version": "0.21.4", + "extraneous": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.4", + "@esbuild/android-arm": "0.21.4", + "@esbuild/android-arm64": "0.21.4", + "@esbuild/android-x64": "0.21.4", + "@esbuild/darwin-arm64": "0.21.4", + "@esbuild/darwin-x64": "0.21.4", + "@esbuild/freebsd-arm64": "0.21.4", + "@esbuild/freebsd-x64": "0.21.4", + "@esbuild/linux-arm": "0.21.4", + "@esbuild/linux-arm64": "0.21.4", + "@esbuild/linux-ia32": "0.21.4", + "@esbuild/linux-loong64": "0.21.4", + "@esbuild/linux-mips64el": "0.21.4", + "@esbuild/linux-ppc64": "0.21.4", + "@esbuild/linux-riscv64": "0.21.4", + "@esbuild/linux-s390x": "0.21.4", + "@esbuild/linux-x64": "0.21.4", + "@esbuild/netbsd-x64": "0.21.4", + "@esbuild/openbsd-x64": "0.21.4", + "@esbuild/sunos-x64": "0.21.4", + "@esbuild/win32-arm64": "0.21.4", + "@esbuild/win32-ia32": "0.21.4", + "@esbuild/win32-x64": "0.21.4" + } + }, + "../../node_modules/.pnpm/eslint-config-airbnb@19.0.4_eslint-plugin-import@2.29.1_eslint-plugin-jsx-a11y@6.9.0_eslint-p_v4tdvujlp57ob5ww5qdzhcumwu/node_modules/eslint-config-airbnb": { + "version": "19.0.4", + "extraneous": true, + "license": "MIT", + "dependencies": { + "eslint-config-airbnb-base": "^15.0.0", + "object.assign": "^4.1.2", + "object.entries": "^1.1.5" + }, + "devDependencies": { + "@babel/runtime": "^7.16.3", + "babel-preset-airbnb": "^4.5.0", + "babel-tape-runner": "^3.0.0", + "eclint": "^2.8.1", + "eslint": "^7.32.0 || ^8.2.0", + "eslint-find-rules": "^4.0.0", + "eslint-plugin-import": "^2.25.3", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.28.0", + "eslint-plugin-react-hooks": "^4.3.0", + "in-publish": "^2.0.1", + "react": ">= 0.13.0", + "safe-publish-latest": "^2.0.0", + "tape": "^5.3.2" + }, + "engines": { + "node": "^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^7.32.0 || ^8.2.0", + "eslint-plugin-import": "^2.25.3", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.28.0", + "eslint-plugin-react-hooks": "^4.3.0" + } + }, + "../../node_modules/.pnpm/eslint-config-prettier@9.1.0_eslint@8.57.0/node_modules/eslint-config-prettier": { + "version": "9.1.0", + "extraneous": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "../../node_modules/.pnpm/eslint-config-standard@17.1.0_eslint-plugin-import@2.29.1_eslint-plugin-n@17.9.0_eslint-plugi_sheowjzegd2ksxtpidx2zgxami/node_modules/eslint-config-standard": { + "version": "17.1.0", + "extraneous": 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" + } + ], + "license": "MIT", + "devDependencies": { + "@types/eslint": "^8.4.1", + "@types/tape": "^4.13.2", + "eslint": "^8.13.0", + "eslint-plugin-import": "^2.25.4", + "eslint-plugin-n": "^16.0.0", + "eslint-plugin-promise": "^6.0.0", + "tape": "^5.5.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "eslint": "^8.0.1", + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-n": "^15.0.0 || ^16.0.0 ", + "eslint-plugin-promise": "^6.0.0" + } + }, + "../../node_modules/.pnpm/eslint-import-resolver-typescript@3.6.1_@typescript-eslint+parser@7.2.0_eslint-plugin-import@2.29.1_eslint@8.57.0/node_modules/eslint-import-resolver-typescript": { + "version": "3.6.1", + "extraneous": true, + "license": "ISC", + "dependencies": { + "debug": "^4.3.4", + "enhanced-resolve": "^5.12.0", + "eslint-module-utils": "^2.7.4", + "fast-glob": "^3.3.1", + "get-tsconfig": "^4.5.0", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3" + }, + "devDependencies": { + "@1stg/lib-config": "^11.0.1", + "@changesets/changelog-github": "^0.4.8", + "@changesets/cli": "^2.26.2", + "@mozilla/glean": "^1.3.0", + "@types/debug": "^4.1.7", + "@types/is-core-module": "^2.2.0", + "@types/is-glob": "^4.0.2", + "@types/node": "^18.15.11", + "@types/unist": "^2.0.8", + "dummy.js": "link:dummy.js", + "react": "^18.2.0", + "size-limit": "^8.2.4", + "size-limit-preset-node-lib": "^0.2.0", + "type-coverage": "^2.25.0", + "typescript": "^5.0.4" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*" + } + }, + "../../node_modules/.pnpm/eslint-plugin-import@2.29.1_@typescript-eslint+parser@7.2.0_eslint-import-resolver-typescript@3.6.1_eslint@8.57.0/node_modules/eslint-plugin-import": { + "version": "2.29.1", + "extraneous": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" + }, + "devDependencies": { + "@angular-eslint/template-parser": "^13.5.0", + "@eslint/import-test-order-redirect-scoped": "file:./tests/files/order-redirect-scoped", + "@test-scope/some-module": "file:./tests/files/symlinked-module", + "@typescript-eslint/parser": "^2.23.0 || ^3.3.0 || ^4.29.3 || ^5.10.0", + "babel-cli": "^6.26.0", + "babel-core": "^6.26.3", + "babel-eslint": "=8.0.3 || ^8.2.6", + "babel-plugin-istanbul": "^4.1.6", + "babel-plugin-module-resolver": "^2.7.1", + "babel-preset-airbnb": "^2.6.0", + "babel-preset-flow": "^6.23.0", + "babel-register": "^6.26.0", + "babylon": "^6.18.0", + "chai": "^4.3.10", + "cross-env": "^4.0.0", + "escope": "^3.6.0", + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8", + "eslint-doc-generator": "^1.6.1", + "eslint-import-resolver-node": "file:./resolvers/node", + "eslint-import-resolver-typescript": "^1.0.2 || ^1.1.1", + "eslint-import-resolver-webpack": "file:./resolvers/webpack", + "eslint-import-test-order-redirect": "file:./tests/files/order-redirect", + "eslint-module-utils": "file:./utils", + "eslint-plugin-eslint-plugin": "^2.3.0", + "eslint-plugin-import": "2.x", + "eslint-plugin-json": "^2.1.2", + "fs-copy-file-sync": "^1.1.1", + "glob": "^7.2.3", + "in-publish": "^2.0.1", + "jackspeak": "=2.1.1", + "linklocal": "^2.8.2", + "lodash.isarray": "^4.0.0", + "markdownlint-cli": "^0.38.0", + "mocha": "^3.5.3", + "npm-which": "^3.0.1", + "nyc": "^11.9.0", + "redux": "^3.7.2", + "rimraf": "^2.7.1", + "safe-publish-latest": "^2.0.0", + "sinon": "^2.4.1", + "typescript": "^2.8.1 || ~3.9.5 || ~4.5.2", + "typescript-eslint-parser": "^15 || ^20 || ^22" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "../../node_modules/.pnpm/eslint-plugin-jest-dom@5.4.0_@testing-library+dom@10.1.0_eslint@8.57.0/node_modules/eslint-plugin-jest-dom": { + "version": "5.4.0", + "extraneous": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.16.3", + "requireindex": "^1.2.0" + }, + "devDependencies": { + "@testing-library/dom": "^8.20.0", + "@typescript-eslint/parser": "^5.9.1", + "eslint": "^8.7.0", + "eslint-doc-generator": "^1.0.0", + "eslint-remote-tester": "^3.0.0", + "eslint-remote-tester-repositories": "^1.0.1", + "kcd-scripts": "^12.0.0", + "semver": "^7.6.0", + "typescript": "^5.1.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0", + "npm": ">=6", + "yarn": ">=1" + }, + "peerDependencies": { + "@testing-library/dom": "^8.0.0 || ^9.0.0 || ^10.0.0", + "eslint": "^6.8.0 || ^7.0.0 || ^8.0.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "@testing-library/dom": { + "optional": true + } + } + }, + "../../node_modules/.pnpm/eslint-plugin-jest-formatting@3.1.0_eslint@8.57.0/node_modules/eslint-plugin-jest-formatting": { + "version": "3.1.0", + "extraneous": true, + "license": "MIT", + "devDependencies": { + "@types/eslint": "^7.29.0", + "@types/jest": "^27.0.2", + "@types/node": "^16.11.7", + "@typescript-eslint/eslint-plugin": "^5.4.0", + "@typescript-eslint/parser": "^5.4.0", + "eslint": "^8.2.0", + "eslint-config-airbnb-base": "^15.0.0", + "eslint-config-prettier": "^8.3.0", + "eslint-import-resolver-typescript": "^2.5.0", + "eslint-plugin-import": "^2.25.3", + "eslint-plugin-jest": "^25.2.4", + "eslint-plugin-jest-formatting": "file:.", + "eslint-plugin-prettier": "^4.0.0", + "jest": "^27.3.1", + "prettier": "2.4.1", + "ts-jest": "^27.0.7", + "typescript": "^4.4.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": ">=0.8.0" + } + }, + "../../node_modules/.pnpm/eslint-plugin-n@17.9.0_eslint@8.57.0/node_modules/eslint-plugin-n": { + "version": "17.9.0", + "extraneous": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "enhanced-resolve": "^5.17.0", + "eslint-plugin-es-x": "^7.5.0", + "get-tsconfig": "^4.7.0", + "globals": "^15.0.0", + "ignore": "^5.2.4", + "minimatch": "^9.0.0", + "semver": "^7.5.3" + }, + "devDependencies": { + "@eslint/js": "^9.0.0", + "@types/eslint": "^8.56.7", + "@types/estree": "^1.0.5", + "@types/node": "^20.11.0", + "@typescript-eslint/parser": "^7.0.0", + "@typescript-eslint/typescript-estree": "^7.0.0", + "eslint": "^9.0.0", + "eslint-config-prettier": "^9.1.0", + "eslint-doc-generator": "^1.6.1", + "eslint-plugin-eslint-plugin": "^6.0.0", + "eslint-plugin-n": "file:.", + "fast-glob": "^3.2.12", + "husky": "^9.0.0", + "lint-staged": "^15.2.0", + "markdownlint-cli": "^0.41.0", + "mocha": "^10.2.0", + "npm-run-all2": "^6.1.1", + "nyc": "^15.1.0", + "opener": "^1.5.2", + "prettier": "^3.1.1", + "punycode": "^2.3.0", + "release-it": "^17.0.0", + "rimraf": "^5.0.1", + "ts-ignore-import": "^4.0.1", + "type-fest": "^4.9.0", + "typescript": "^5.1.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": ">=8.23.0" + } + }, + "../../node_modules/.pnpm/eslint-plugin-no-only-tests@3.1.0/node_modules/eslint-plugin-no-only-tests": { + "version": "3.1.0", + "extraneous": true, + "license": "MIT", + "devDependencies": { + "eslint": ">=3.0.0" + }, + "engines": { + "node": ">=5.0.0" + } + }, + "../../node_modules/.pnpm/eslint-plugin-prefer-arrow@1.2.3_eslint@8.57.0/node_modules/eslint-plugin-prefer-arrow": { + "version": "1.2.3", + "extraneous": true, + "license": "MIT", + "devDependencies": { + "@typescript-eslint/parser": "^2.4.0", + "babel-eslint": "^10.0.3", + "eslint": ">=2.0.0 <7.0.0", + "mocha": "^3.4.1", + "typescript": "^3.6.4" + }, + "peerDependencies": { + "eslint": ">=2.0.0" + } + }, + "../../node_modules/.pnpm/eslint-plugin-prettier@5.1.3_eslint-config-prettier@9.1.0_eslint@8.57.0_prettier@3.1.0/node_modules/eslint-plugin-prettier": { + "version": "5.1.3", + "extraneous": true, + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.6" + }, + "devDependencies": { + "@1stg/remark-preset": "^2.0.0", + "@changesets/changelog-github": "^0.5.0", + "@changesets/cli": "^2.27.1", + "@commitlint/config-conventional": "^18.4.3", + "@eslint-community/eslint-plugin-eslint-comments": "^4.1.0", + "@eslint/js": "^8.56.0", + "@graphql-eslint/eslint-plugin": "^3.20.1", + "@prettier/plugin-pug": "^3.0.0", + "@types/eslint": "^8.56.0", + "@types/prettier-linter-helpers": "^1.0.4", + "commitlint": "^18.4.3", + "eslint": "^8.56.0", + "eslint-config-prettier": "^9.1.0", + "eslint-formatter-friendly": "^7.0.0", + "eslint-mdx": "^2.3.0", + "eslint-plugin-eslint-plugin": "^5.2.1", + "eslint-plugin-mdx": "^2.3.0", + "eslint-plugin-n": "^16.5.0", + "eslint-plugin-prettier": "link:.", + "eslint-plugin-pug": "^1.2.5", + "eslint-plugin-svelte": "^2.35.1", + "eslint-plugin-svelte3": "^4.0.0", + "graphql": "^16.8.1", + "lint-staged": "^15.2.0", + "mocha": "^10.2.0", + "prettier": "^3.1.1", + "prettier-plugin-pkg": "^0.18.0", + "prettier-plugin-svelte": "^3.1.2", + "simple-git-hooks": "^2.9.0", + "svelte": "^4.2.8", + "vue-eslint-parser": "^9.3.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": "*", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "../../node_modules/.pnpm/eslint-plugin-promise@6.2.0_eslint@8.57.0/node_modules/eslint-plugin-promise": { + "version": "6.2.0", + "extraneous": true, + "license": "ISC", + "devDependencies": { + "@typescript-eslint/parser": "^5.45.0", + "doctoc": "^2.2.1", + "eslint": "^8.28.0", + "eslint-config-prettier": "^8.5.0", + "eslint-doc-generator": "^0.25.0", + "eslint-plugin-eslint-plugin": "^4.4.1", + "eslint-plugin-jest": "^26.9.0", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-prettier": "^4.2.1", + "globals": "^14.0.0", + "husky": "^7.0.4", + "jest": "^28.1.3", + "lint-staged": "^12.5.0", + "npm-run-all": "^4.1.5", + "prettier": "^2.7.1", + "typescript": "^4.9.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" + } + }, + "../../node_modules/.pnpm/eslint@8.57.0/node_modules/eslint": { + "version": "8.57.0", + "extraneous": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "devDependencies": { + "@babel/core": "^7.4.3", + "@babel/preset-env": "^7.4.3", + "@wdio/browser-runner": "^8.14.6", + "@wdio/cli": "^8.14.6", + "@wdio/concise-reporter": "^8.14.0", + "@wdio/globals": "^8.14.6", + "@wdio/mocha-framework": "^8.14.0", + "babel-loader": "^8.0.5", + "c8": "^7.12.0", + "chai": "^4.0.1", + "cheerio": "^0.22.0", + "common-tags": "^1.8.0", + "core-js": "^3.1.3", + "ejs": "^3.0.2", + "eslint": "file:.", + "eslint-config-eslint": "file:packages/eslint-config-eslint", + "eslint-plugin-eslint-comments": "^3.2.0", + "eslint-plugin-eslint-plugin": "^5.2.1", + "eslint-plugin-internal-rules": "file:tools/internal-rules", + "eslint-plugin-jsdoc": "^46.2.5", + "eslint-plugin-n": "^16.6.0", + "eslint-plugin-unicorn": "^49.0.0", + "eslint-release": "^3.2.0", + "eslump": "^3.0.0", + "esprima": "^4.0.1", + "fast-glob": "^3.2.11", + "fs-teardown": "^0.1.3", + "glob": "^7.1.6", + "got": "^11.8.3", + "gray-matter": "^4.0.3", + "lint-staged": "^11.0.0", + "load-perf": "^0.2.0", + "markdown-it": "^12.2.0", + "markdown-it-container": "^3.0.0", + "markdownlint": "^0.32.0", + "markdownlint-cli": "^0.37.0", + "marked": "^4.0.8", + "memfs": "^3.0.1", + "metascraper": "^5.25.7", + "metascraper-description": "^5.25.7", + "metascraper-image": "^5.29.3", + "metascraper-logo": "^5.25.7", + "metascraper-logo-favicon": "^5.25.7", + "metascraper-title": "^5.25.7", + "mocha": "^8.3.2", + "mocha-junit-reporter": "^2.0.0", + "node-polyfill-webpack-plugin": "^1.0.3", + "npm-license": "^0.3.3", + "pirates": "^4.0.5", + "progress": "^2.0.3", + "proxyquire": "^2.0.1", + "recast": "^0.23.0", + "regenerator-runtime": "^0.14.0", + "rollup-plugin-node-polyfills": "^0.2.1", + "semver": "^7.5.3", + "shelljs": "^0.8.2", + "sinon": "^11.0.0", + "vite-plugin-commonjs": "^0.10.0", + "webdriverio": "^8.14.6", + "webpack": "^5.23.0", + "webpack-cli": "^4.5.0", + "yorkie": "^2.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "../../node_modules/.pnpm/http-server@14.1.1/node_modules/http-server": { + "version": "14.1.1", + "extraneous": true, + "license": "MIT", + "dependencies": { + "basic-auth": "^2.0.1", + "chalk": "^4.1.2", + "corser": "^2.0.1", + "he": "^1.2.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy": "^1.18.1", + "mime": "^1.6.0", + "minimist": "^1.2.6", + "opener": "^1.5.1", + "portfinder": "^1.0.28", + "secure-compare": "3.0.1", + "union": "~0.5.0", + "url-join": "^4.0.1" + }, + "bin": { + "http-server": "bin/http-server" + }, + "devDependencies": { + "eol": "^0.9.1", + "eslint": "^4.19.1", + "eslint-config-populist": "^4.2.0", + "express": "^4.17.1", + "request": "^2.88.2", + "tap": "^14.11.0" + }, + "engines": { + "node": ">=12" + } + }, + "../../node_modules/.pnpm/js-cookie@3.0.5/node_modules/js-cookie": { + "version": "3.0.5", + "extraneous": true, + "license": "MIT", + "devDependencies": { + "@rollup/plugin-terser": "^0.4.0", + "browserstack-runner": "github:browserstack/browserstack-runner#1e85e559951bdf97ffe2a7c744ee67ca83589fde", + "eslint": "^7.31.0", + "eslint-config-standard": "^16.0.3", + "eslint-plugin-html": "^7.0.0", + "eslint-plugin-markdown": "^3.0.0", + "grunt": "^1.0.4", + "grunt-compare-size": "^0.4.2", + "grunt-contrib-connect": "^3.0.0", + "grunt-contrib-nodeunit": "^5.0.0", + "grunt-contrib-qunit": "^7.0.0", + "grunt-contrib-watch": "^1.1.0", + "grunt-exec": "^3.0.0", + "gzip-js": "^0.3.2", + "prettier": "^2.3.2", + "qunit": "^2.9.3", + "release-it": "^15.0.0", + "rollup": "^3.17.2", + "rollup-plugin-filesize": "^10.0.0", + "rollup-plugin-license": "^3.0.0", + "standard": "^17.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "../../node_modules/.pnpm/jwt-decode@3.1.2/node_modules/jwt-decode": { + "version": "3.1.2", + "extraneous": true, + "license": "MIT", + "devDependencies": { + "@rollup/plugin-commonjs": "^15.0.0", + "@rollup/plugin-node-resolve": "^9.0.0", + "expect.js": "~0.2.0", + "mocha": "^8.1.3", + "rimraf": "^2.2.8", + "rollup": "^2.26.11", + "rollup-plugin-livereload": "^2.0.0", + "rollup-plugin-serve": "^1.0.4", + "rollup-plugin-sourcemaps": "^0.6.2", + "rollup-plugin-terser": "^7.0.2", + "uglify-js": "^2.8.29" + } + }, + "../../node_modules/.pnpm/lint-staged@15.1.0/node_modules/lint-staged": { + "version": "15.1.0", + "extraneous": true, + "license": "MIT", + "dependencies": { + "chalk": "5.3.0", + "commander": "11.1.0", + "debug": "4.3.4", + "execa": "8.0.1", + "lilconfig": "2.1.0", + "listr2": "7.0.2", + "micromatch": "4.0.5", + "pidtree": "0.6.0", + "string-argv": "0.3.2", + "yaml": "2.3.4" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, + "devDependencies": { + "@babel/core": "7.23.3", + "@babel/eslint-parser": "7.23.3", + "@babel/preset-env": "7.23.3", + "@changesets/changelog-github": "0.4.8", + "@changesets/cli": "2.26.2", + "@commitlint/cli": "18.4.0", + "@commitlint/config-conventional": "18.4.0", + "babel-jest": "29.7.0", + "babel-plugin-transform-imports": "2.0.0", + "consolemock": "1.1.0", + "eslint": "8.53.0", + "eslint-config-prettier": "9.0.0", + "eslint-plugin-import": "2.29.0", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-prettier": "5.0.1", + "husky": "8.0.3", + "jest": "29.7.0", + "jest-snapshot-serializer-ansi": "2.1.0", + "mock-stdin": "1.0.0", + "prettier": "3.0.3" + }, + "engines": { + "node": ">=18.12.0" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" + } + }, + "../../node_modules/.pnpm/prettier@3.1.0/node_modules/prettier": { + "version": "3.1.0", + "extraneous": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "../../node_modules/.pnpm/pretty-quick@4.0.0_prettier@3.1.0/node_modules/pretty-quick": { + "version": "4.0.0", + "extraneous": true, + "license": "MIT", + "dependencies": { + "execa": "^5.1.1", + "find-up": "^5.0.0", + "ignore": "^5.3.0", + "mri": "^1.2.0", + "picocolors": "^1.0.0", + "picomatch": "^3.0.1", + "tslib": "^2.6.2" + }, + "bin": { + "pretty-quick": "lib/cli.mjs" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "prettier": "^3.0.0" + } + }, + "../../node_modules/.pnpm/rimraf@5.0.1/node_modules/rimraf": { + "version": "5.0.1", + "extraneous": true, + "license": "ISC", + "dependencies": { + "glob": "^10.2.5" + }, + "bin": { + "rimraf": "dist/cjs/src/bin.js" + }, + "devDependencies": { + "@types/node": "^18.11.9", + "@types/tap": "^15.0.7", + "c8": "^7.12.0", + "eslint-config-prettier": "^8.6.0", + "mkdirp": "^3.0.0", + "prettier": "^2.8.2", + "tap": "^16.3.4", + "ts-node": "^10.9.1", + "typedoc": "^0.23.21", + "typescript": "^5.0.4" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "../../node_modules/.pnpm/rollup-plugin-auto-external@2.0.0_rollup@4.13.0/node_modules/rollup-plugin-auto-external": { + "version": "2.0.0", + "extraneous": true, + "license": "MIT", + "dependencies": { + "builtins": "^2.0.0", + "read-pkg": "^3.0.0", + "safe-resolve": "^1.0.0", + "semver": "^5.5.0" + }, + "devDependencies": { + "jest": "^20.0.4" + }, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "rollup": ">=0.45.2" + } + }, + "../../node_modules/.pnpm/rollup-plugin-browsersync@1.3.3/node_modules/rollup-plugin-browsersync": { + "version": "1.3.3", + "extraneous": true, + "license": "MIT", + "dependencies": { + "browser-sync": "^2.26.14" + }, + "devDependencies": { + "jest": "^26.5.2", + "puppeteer": "^5.3.1", + "replace-in-file": "^6.1.0", + "rollup": "^2.29.0", + "wait-port": "^0.2.9" + } + }, + "../../node_modules/.pnpm/rollup-plugin-define@1.0.1_rollup@3.29.4/node_modules/rollup-plugin-define": { + "version": "1.0.1", + "extraneous": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^4.0.0", + "ast-matcher": "^1.1.1", + "escape-string-regexp": "^4.0.0", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "../../node_modules/.pnpm/rollup-plugin-delete@2.0.0/node_modules/rollup-plugin-delete": { + "version": "2.0.0", + "extraneous": true, + "license": "MIT", + "dependencies": { + "del": "^5.1.0" + }, + "devDependencies": { + "@babel/core": "^7.10.2", + "@babel/preset-env": "^7.10.2", + "babel-jest": "^26.0.1", + "codecov": "^3.7.0", + "eslint": "^6.8.0", + "eslint-config-airbnb-base": "^14.1.0", + "eslint-plugin-import": "^2.21.2", + "fs-extra": "^9.0.1", + "jest": "^26.0.1", + "replace-in-file": "^6.1.0", + "rimraf": "^3.0.2", + "rollup": "^2.15.0", + "rollup-plugin-auto-external": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "../../node_modules/.pnpm/rollup-plugin-dts@6.1.0_rollup@3.29.4_typescript@4.9.5/node_modules/rollup-plugin-dts": { + "version": "6.1.0", + "extraneous": true, + "license": "LGPL-3.0", + "dependencies": { + "magic-string": "^0.30.4" + }, + "devDependencies": { + "@babel/code-frame": "^7.22.13", + "@types/babel__code-frame": "^7.0.4", + "@types/d3-drag": "^3.0.4", + "@types/estree": "1.0.2", + "@types/node": "^20.8.0", + "@types/react": "^18.2.24", + "c8": "^8.0.1", + "rollup": "^4.0.1", + "typescript": "5.2.2" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/Swatinem" + }, + "optionalDependencies": { + "@babel/code-frame": "^7.22.13" + }, + "peerDependencies": { + "rollup": "^3.29.4 || ^4", + "typescript": "^4.5 || ^5.0" + } + }, + "../../node_modules/.pnpm/rollup-plugin-dts@6.1.0_rollup@4.13.0_typescript@4.9.5/node_modules/rollup-plugin-dts": { + "version": "6.1.0", + "extraneous": true, + "license": "LGPL-3.0", + "dependencies": { + "magic-string": "^0.30.4" + }, + "devDependencies": { + "@babel/code-frame": "^7.22.13", + "@types/babel__code-frame": "^7.0.4", + "@types/d3-drag": "^3.0.4", + "@types/estree": "1.0.2", + "@types/node": "^20.8.0", + "@types/react": "^18.2.24", + "c8": "^8.0.1", + "rollup": "^4.0.1", + "typescript": "5.2.2" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/Swatinem" + }, + "optionalDependencies": { + "@babel/code-frame": "^7.22.13" + }, + "peerDependencies": { + "rollup": "^3.29.4 || ^4", + "typescript": "^4.5 || ^5.0" + } + }, + "../../node_modules/.pnpm/rollup-plugin-esbuild@6.1.1_esbuild@0.21.4_rollup@4.13.0/node_modules/rollup-plugin-esbuild": { + "version": "6.1.1", + "extraneous": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.5", + "debug": "^4.3.4", + "es-module-lexer": "^1.3.1", + "get-tsconfig": "^4.7.2" + }, + "devDependencies": { + "@types/debug": "^4.1.9", + "@types/node": "20.8.3", + "esbuild": "^0.19.4", + "prettier": "^3.0.3", + "react": "^18.2.0", + "rollup": "^4.0.2", + "ts-essentials": "^9.4.1", + "tsup": "^7.2.0", + "typescript": "^5.2.2", + "vitest": "^0.34.6", + "vue": "^3.3.4" + }, + "engines": { + "node": ">=14.18.0" + }, + "peerDependencies": { + "esbuild": ">=0.18.0", + "rollup": "^1.20.0 || ^2.0.0 || ^3.0.0 || ^4.0.0" + } + }, + "../../node_modules/.pnpm/rollup-plugin-inject-process-env@1.3.1/node_modules/rollup-plugin-inject-process-env": { + "version": "1.3.1", + "extraneous": true, + "license": "MIT", + "dependencies": { + "magic-string": "^0.25.7" + }, + "devDependencies": { + "@babel/core": "^7.12.3", + "@babel/preset-env": "^7.12.1", + "@rollup/plugin-commonjs": "^11.1.0", + "@rollup/plugin-inject": "^4.0.2", + "@rollup/plugin-node-resolve": "^7.1.3", + "@rollup/pluginutils": "^3.1.0", + "@types/jest": "^24.9.1", + "@types/jest-environment-puppeteer": "^4.4.0", + "@types/node": "^12.19.3", + "@types/puppeteer": "^2.1.5", + "jest": "^24.9.0", + "jest-puppeteer": "^4.4.0", + "puppeteer": "^2.1.1", + "rollup": "^1.32.1", + "rollup-plugin-babel": "^4.4.0", + "rollup-plugin-postcss": "^3.1.8", + "rollup-plugin-typescript2": "^0.25.3", + "sloc": "^0.2.1", + "ts-jest": "^24.3.0", + "ts-node": "^8.10.2", + "tslint": "^5.20.1", + "typescript": "^3.9.7" + } + }, + "../../node_modules/.pnpm/rollup-plugin-livereload@2.0.5/node_modules/rollup-plugin-livereload": { + "version": "2.0.5", + "extraneous": true, + "license": "MIT", + "dependencies": { + "livereload": "^0.9.1" + }, + "devDependencies": { + "@rollup/plugin-node-resolve": "^9.0.0", + "port-authority": "^1.1.1", + "rollup": "2", + "rollup-plugin-serve": "1" + }, + "engines": { + "node": ">=8.3" + } + }, + "../../node_modules/.pnpm/rollup-plugin-terser@7.0.2_rollup@3.29.4/node_modules/rollup-plugin-terser": { + "version": "7.0.2", + "extraneous": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "devDependencies": { + "@babel/core": "^7.11.1", + "jest": "^26.2.2", + "prettier": "^2.0.5", + "rollup": "^2.23.1" + }, + "peerDependencies": { + "rollup": "^2.0.0" + } + }, + "../../node_modules/.pnpm/rollup@3.29.4/node_modules/rollup": { + "version": "3.29.4", + "extraneous": true, + "license": "MIT", + "bin": { + "rollup": "dist/bin/rollup" + }, + "devDependencies": { + "@codemirror/commands": "^6.2.5", + "@codemirror/lang-javascript": "^6.2.1", + "@codemirror/language": "^6.9.0", + "@codemirror/search": "^6.5.3", + "@codemirror/state": "^6.2.1", + "@codemirror/view": "^6.19.0", + "@jridgewell/sourcemap-codec": "^1.4.15", + "@mermaid-js/mermaid-cli": "^10.4.0", + "@rollup/plugin-alias": "^5.0.0", + "@rollup/plugin-buble": "^1.0.2", + "@rollup/plugin-commonjs": "^25.0.4", + "@rollup/plugin-json": "^6.0.0", + "@rollup/plugin-node-resolve": "^15.2.1", + "@rollup/plugin-replace": "^5.0.2", + "@rollup/plugin-terser": "^0.4.3", + "@rollup/plugin-typescript": "11.1.2", + "@rollup/pluginutils": "^5.0.4", + "@types/estree": "1.0.1", + "@types/mocha": "^10.0.1", + "@types/node": "~14.18.61", + "@types/yargs-parser": "^21.0.0", + "@typescript-eslint/eslint-plugin": "^6.7.2", + "@typescript-eslint/parser": "^6.7.2", + "@vue/eslint-config-prettier": "^8.0.0", + "@vue/eslint-config-typescript": "^12.0.0", + "acorn": "^8.10.0", + "acorn-import-assertions": "^1.9.0", + "acorn-jsx": "^5.3.2", + "acorn-walk": "^8.2.0", + "buble": "^0.20.0", + "builtin-modules": "^3.3.0", + "chokidar": "^3.5.3", + "colorette": "^2.0.20", + "concurrently": "^8.2.1", + "core-js": "^3.32.2", + "date-time": "^4.0.0", + "es5-shim": "^4.6.7", + "es6-shim": "^0.35.8", + "eslint": "^8.49.0", + "eslint-config-prettier": "^9.0.0", + "eslint-plugin-import": "^2.28.1", + "eslint-plugin-prettier": "^5.0.0", + "eslint-plugin-unicorn": "^48.0.1", + "eslint-plugin-vue": "^9.17.0", + "fixturify": "^3.0.0", + "flru": "^1.0.2", + "fs-extra": "^11.1.1", + "github-api": "^3.4.0", + "hash.js": "^1.1.7", + "husky": "^8.0.3", + "inquirer": "^9.2.11", + "is-reference": "^3.0.2", + "lint-staged": "^14.0.1", + "locate-character": "^3.0.0", + "magic-string": "^0.30.3", + "mocha": "^10.2.0", + "nyc": "^15.1.0", + "pinia": "^2.1.6", + "prettier": "^3.0.3", + "pretty-bytes": "^6.1.1", + "pretty-ms": "^8.0.0", + "requirejs": "^2.3.6", + "rollup": "^3.29.2", + "rollup-plugin-license": "^3.1.0", + "rollup-plugin-string": "^3.0.0", + "rollup-plugin-thatworks": "^1.0.4", + "semver": "^7.5.4", + "shx": "^0.3.4", + "signal-exit": "^4.1.0", + "source-map": "^0.7.4", + "source-map-support": "^0.5.21", + "systemjs": "^6.14.2", + "terser": "^5.19.4", + "tslib": "^2.6.2", + "typescript": "^5.2.2", + "vite": "^4.4.9", + "vitepress": "^1.0.0-rc.14", + "vue": "^3.3.4", + "weak-napi": "^2.0.2", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "../../node_modules/.pnpm/rollup@4.13.0/node_modules/rollup": { + "version": "4.13.0", + "extraneous": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "devDependencies": { + "@codemirror/commands": "^6.3.3", + "@codemirror/lang-javascript": "^6.2.2", + "@codemirror/language": "^6.10.1", + "@codemirror/search": "^6.5.6", + "@codemirror/state": "^6.4.1", + "@codemirror/view": "^6.25.0", + "@jridgewell/sourcemap-codec": "^1.4.15", + "@mermaid-js/mermaid-cli": "^10.8.0", + "@napi-rs/cli": "^2.18.0", + "@rollup/plugin-alias": "^5.1.0", + "@rollup/plugin-buble": "^1.0.3", + "@rollup/plugin-commonjs": "^25.0.7", + "@rollup/plugin-json": "^6.1.0", + "@rollup/plugin-node-resolve": "^15.2.3", + "@rollup/plugin-replace": "^5.0.5", + "@rollup/plugin-terser": "^0.4.4", + "@rollup/plugin-typescript": "^11.1.6", + "@rollup/pluginutils": "^5.1.0", + "@types/eslint": "^8.56.5", + "@types/inquirer": "^9.0.7", + "@types/mocha": "^10.0.6", + "@types/node": "~18.18.14", + "@types/yargs-parser": "^21.0.3", + "@typescript-eslint/eslint-plugin": "^7.1.1", + "@typescript-eslint/parser": "^7.1.1", + "@vue/eslint-config-prettier": "^9.0.0", + "@vue/eslint-config-typescript": "^12.0.0", + "acorn": "^8.11.3", + "acorn-import-assertions": "^1.9.0", + "buble": "^0.20.0", + "builtin-modules": "^3.3.0", + "chokidar": "^3.6.0", + "colorette": "^2.0.20", + "concurrently": "^8.2.2", + "core-js": "3.36.0", + "date-time": "^4.0.0", + "es5-shim": "^4.6.7", + "es6-shim": "^0.35.8", + "eslint": "^8.57.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-import": "^2.29.1", + "eslint-plugin-prettier": "^5.1.3", + "eslint-plugin-unicorn": "^51.0.1", + "eslint-plugin-vue": "^9.22.0", + "fixturify": "^3.0.0", + "flru": "^1.0.2", + "fs-extra": "^11.2.0", + "github-api": "^3.4.0", + "husky": "^9.0.11", + "inquirer": "^9.2.15", + "is-reference": "^3.0.2", + "lint-staged": "^15.2.2", + "locate-character": "^3.0.0", + "magic-string": "^0.30.8", + "mocha": "^10.3.0", + "nyc": "^15.1.0", + "pinia": "^2.1.7", + "prettier": "^3.2.5", + "pretty-bytes": "^6.1.1", + "pretty-ms": "^9.0.0", + "requirejs": "^2.3.6", + "rollup": "^4.12.0", + "rollup-plugin-license": "^3.2.0", + "rollup-plugin-string": "^3.0.0", + "semver": "^7.6.0", + "shx": "^0.3.4", + "signal-exit": "^4.1.0", + "source-map": "^0.7.4", + "source-map-support": "^0.5.21", + "systemjs": "^6.14.3", + "terser": "^5.28.1", + "tslib": "^2.6.2", + "typescript": "^5.3.3", + "vite": "^5.1.5", + "vitepress": "1.0.0-rc.39", + "vue": "^3.4.21", + "wasm-pack": "^0.12.1", + "weak-napi": "^2.0.2", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.13.0", + "@rollup/rollup-android-arm64": "4.13.0", + "@rollup/rollup-darwin-arm64": "4.13.0", + "@rollup/rollup-darwin-x64": "4.13.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.13.0", + "@rollup/rollup-linux-arm64-gnu": "4.13.0", + "@rollup/rollup-linux-arm64-musl": "4.13.0", + "@rollup/rollup-linux-riscv64-gnu": "4.13.0", + "@rollup/rollup-linux-x64-gnu": "4.13.0", + "@rollup/rollup-linux-x64-musl": "4.13.0", + "@rollup/rollup-win32-arm64-msvc": "4.13.0", + "@rollup/rollup-win32-ia32-msvc": "4.13.0", + "@rollup/rollup-win32-x64-msvc": "4.13.0", + "fsevents": "~2.3.2" + } + }, + "../../node_modules/.pnpm/shadow-dom-testing-library@1.10.0_@testing-library+dom@10.1.0/node_modules/shadow-dom-testing-library": { + "version": "1.10.0", + "extraneous": true, + "license": "MIT", + "devDependencies": { + "@open-wc/testing-helpers": "^2.1.2", + "@testing-library/dom": ">= 8", + "@testing-library/jest-dom": "^5.16.4", + "@testing-library/react": "^13.3.0", + "@types/jest": "^28.1.4", + "@types/node": "^18.0.3", + "@types/react": "^18.0.15", + "@types/react-dom": "^18.0.6", + "@vitejs/plugin-react": "^1.3.2", + "identity-obj-proxy": "^3.0.0", + "jest": "^28.1.2", + "jest-environment-jsdom": "^28.1.2", + "jest-preview": "^0.2.6", + "jsdom": "^20.0.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "standard-version": "^9.5.0", + "ts-jest": "^28.0.5", + "tslib": "^2.4.0", + "tsup": "^6.1.3", + "typescript": "^4.7.4", + "vite": "^3.2.1", + "vitest": "^0.17.1" + }, + "engines": { + "node": ">= 14", + "npm": ">= 7" + }, + "peerDependencies": { + "@testing-library/dom": ">= 8" + } + }, + "../../node_modules/.pnpm/string-to-arraybuffer@1.0.2/node_modules/string-to-arraybuffer": { + "version": "1.0.2", + "extraneous": true, + "license": "MIT", + "dependencies": { + "atob-lite": "^2.0.0", + "is-base64": "^0.1.0" + }, + "devDependencies": { + "arraybuffer-to-string": "^1.0.0", + "is-browser": "^2.0.1", + "tape": "^4.7.0" + } + }, + "../../node_modules/.pnpm/tslib@2.6.3/node_modules/tslib": { + "version": "2.6.3", + "extraneous": true, + "license": "0BSD" + }, + "../../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript": { + "version": "4.9.5", + "extraneous": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "devDependencies": { + "@octokit/rest": "latest", + "@types/chai": "latest", + "@types/fancy-log": "^2.0.0", + "@types/fs-extra": "^9.0.13", + "@types/glob": "latest", + "@types/gulp": "^4.0.9", + "@types/gulp-concat": "latest", + "@types/gulp-newer": "latest", + "@types/gulp-rename": "latest", + "@types/gulp-sourcemaps": "latest", + "@types/merge2": "latest", + "@types/microsoft__typescript-etw": "latest", + "@types/minimist": "latest", + "@types/mkdirp": "latest", + "@types/mocha": "latest", + "@types/ms": "latest", + "@types/node": "latest", + "@types/source-map-support": "latest", + "@types/which": "^2.0.1", + "@types/xml2js": "^0.4.11", + "@typescript-eslint/eslint-plugin": "^5.33.1", + "@typescript-eslint/parser": "^5.33.1", + "@typescript-eslint/utils": "^5.33.1", + "azure-devops-node-api": "^11.2.0", + "chai": "latest", + "chalk": "^4.1.2", + "del": "^6.1.1", + "diff": "^5.1.0", + "eslint": "^8.22.0", + "eslint-formatter-autolinkable-stylish": "^1.2.0", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-jsdoc": "^39.3.6", + "eslint-plugin-local": "^1.0.0", + "eslint-plugin-no-null": "^1.0.2", + "fancy-log": "latest", + "fs-extra": "^9.1.0", + "glob": "latest", + "gulp": "^4.0.2", + "gulp-concat": "latest", + "gulp-insert": "latest", + "gulp-newer": "latest", + "gulp-rename": "latest", + "gulp-sourcemaps": "latest", + "merge2": "latest", + "minimist": "latest", + "mkdirp": "latest", + "mocha": "latest", + "mocha-fivemat-progress-reporter": "latest", + "ms": "^2.1.3", + "node-fetch": "^3.2.10", + "source-map-support": "latest", + "typescript": "^4.8.4", + "vinyl": "latest", + "which": "^2.0.2", + "xml2js": "^0.4.23" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "../core-js-sdk": { + "extraneous": true + }, + "../web-js-sdk": { + "extraneous": true + } + } +}