diff --git a/packages/widget/package.json b/packages/widget/package.json index 250aa70a..2b3fdab5 100644 --- a/packages/widget/package.json +++ b/packages/widget/package.json @@ -2,10 +2,15 @@ "name": "@buildwithsygma/sygmaprotocol-widget", "description": "Sygma Protocol Widget", "version": "0.1.0", - "main": "build/index.js", - "module": "build/index.js", + "main": "build/sygmaprotocol-widget.js", + "module": "build/sygmaprotocol-widget.js", + "types": "build/index.d.ts", "license": "LGPL-3.0-or-later", "type": "module", + "files": [ + "build", + "src" + ], "scripts": { "start": "yarn run dev", "dev": "vite", @@ -13,7 +18,7 @@ "serve": "vite preview", "clean": "rm -rf ./build", "lint": "yarn run lint:types && yarn run lint:code && yarn run lint:lit", - "lint:types": "tsc -p ./tsconfig.build.json --noEmit", + "lint:types": "tsc -p ./tsconfig.json --noEmit", "lint:code": "eslint '{src,tests}/**/*.ts'", "lint:lit": "lit-analyzer", "test": "yarn run test:unit", @@ -35,6 +40,8 @@ "lit": "3.0.0" }, "devDependencies": { + "@open-wc/semantic-dom-diff": "^0.20.1", + "@open-wc/testing-helpers": "^3.0.0", "eslint": "^8.48.0", "eslint-plugin-lit": "^1.9.1", "jsdom": "^23.2.0", @@ -43,6 +50,7 @@ "typescript": "5.2.2", "vite": "4.4.11", "vite-plugin-clean": "^1.0.0", + "vite-plugin-dts": "^3.7.1", "vitest": "^1.2.1" } } diff --git a/packages/widget/src/components/amount-selector/amount-selector.ts b/packages/widget/src/components/amount-selector/amount-selector.ts index 5d80cb20..4a5a9b99 100644 --- a/packages/widget/src/components/amount-selector/amount-selector.ts +++ b/packages/widget/src/components/amount-selector/amount-selector.ts @@ -1,21 +1,20 @@ import type { Resource } from '@buildwithsygma/sygma-sdk-core'; import type { HTMLTemplateResult } from 'lit'; import { LitElement, html } from 'lit'; -import { customElement, property, state } from 'lit/decorators.js'; +import { customElement, property, query } from 'lit/decorators.js'; import { ifDefined } from 'lit/directives/if-defined.js'; -import type { Ref } from 'lit/directives/ref.js'; -import { createRef, ref } from 'lit/directives/ref.js'; +import { map } from 'lit/directives/map.js'; import { when } from 'lit/directives/when.js'; import { styles } from './styles'; -@customElement('amount-selector') -export default class AmountSelector extends LitElement { +@customElement('sygma-resource-selector') +export class AmountSelector extends LitElement { static styles = styles; @property({ type: Array, hasChanged: (n, o) => n !== o }) - resources?: Resource[]; + resources: Resource[] = []; @property({ type: Boolean @@ -23,91 +22,103 @@ export default class AmountSelector extends LitElement { disabled = false; @property({ - type: Boolean, - hasChanged: (n, o) => n !== o - }) - isNativeToken?: boolean; - - @state({ - hasChanged: (n, o) => n !== o + type: String }) - selectedNetworkChainId?: number; + accountBalance?: string; @property({ type: String }) - tokenBalance?: string; + preselectedToken?: string; @property({ - type: String + type: Number }) - tokenName?: string; + preselectedAmount?: number; - @state({ - hasChanged: (n, o) => n !== o + @property({ + attribute: false }) - selectedAmount?: number; - - inputRef: Ref = createRef(); + onResourceSelected?: (resource: Resource) => void; - handleAmountChange = (event: Event): void => { - const { value } = event.target as HTMLInputElement; - - this.selectedAmount = Number.parseFloat(value); + @property({ + attribute: false + }) + onAmountChange?: (amount: number) => void; - dispatchEvent( - new CustomEvent('amount-selector-change', { - detail: value, - bubbles: true, - composed: true - }) - ); - }; + @query('.amountSelectorInput', true) + _input!: HTMLInputElement; useMaxBalance = (): void => { - this.selectedAmount = Number.parseFloat(this.tokenBalance!); + this.preselectedAmount = Number.parseFloat(this.accountBalance!); + this._onInputAmountChange(); + }; - (this.inputRef.value as HTMLInputElement).value = `${this.selectedAmount}`; - const event = new Event('input', { - bubbles: true - }); + _onInputAmountChange = (): void => { + const amount = Number.parseFloat(this._input.value); + this.onAmountChange?.(amount); + }; - this.inputRef.value?.dispatchEvent(event); + _onResourceSelected = (event: Event): void => { + const { value } = event.target as HTMLOptionElement; + const resource = this.resources.find((n) => String(n.resourceId) == value); + if (resource) { + this.onResourceSelected?.(resource); + } }; renderBalance(): HTMLTemplateResult { return html`
- ${`${Number.parseFloat(this.tokenBalance!).toFixed(4)}`} + ${`${Number.parseFloat(this.accountBalance!).toFixed(4)}`}
`; } + renderEntries(): Generator | HTMLTemplateResult { + if (this.resources) { + return map(this.resources, (entry: Resource) => { + // TODO: render resource/token icon + return html``; + }); + } + return html``; + } + render(): HTMLTemplateResult { return html`
-
- - ${when(this.tokenBalance, () => this.renderBalance())} +
+ + ${when(this.accountBalance, () => this.renderBalance())}
- - + +
+
-
+ `; } } + +declare global { + interface HTMLElementTagNameMap { + 'sygma-resource-selector': AmountSelector; + } +} diff --git a/packages/widget/src/components/amount-selector/index.ts b/packages/widget/src/components/amount-selector/index.ts index 20ea1dc9..2c52c3a2 100644 --- a/packages/widget/src/components/amount-selector/index.ts +++ b/packages/widget/src/components/amount-selector/index.ts @@ -1 +1 @@ -export { default } from './amount-selector'; +export { AmountSelector } from './amount-selector'; diff --git a/packages/widget/src/components/amount-selector/styles.ts b/packages/widget/src/components/amount-selector/styles.ts index be35c683..c893ab35 100644 --- a/packages/widget/src/components/amount-selector/styles.ts +++ b/packages/widget/src/components/amount-selector/styles.ts @@ -6,20 +6,17 @@ export const styles = css` padding: 4px 12px; align-items: center; border-radius: 24px; - width: 314px; - height: 116px; + width: 314px; /* TODO: remove hardcoded values */ + height: 116px; /* TODO: ↑ */ flex-direction: column; } .amountSelectorLabel { display: flex; width: 100%; - flex-direction: row; justify-content: flex-start; - color: var(--neutral-600, #525252); - font-family: Inter; + color: #525252; font-size: 14px; - font-style: normal; font-weight: 500; line-height: 20px; /* 142.857% */ } @@ -27,44 +24,35 @@ export const styles = css` .amountSelectorSection { display: flex; width: 100%; - flex-direction: row; justify-content: space-between; align-items: center; } .amountSelectorInput { border: none; - color: var(--neutral-600, #525252); - font-family: Inter; + color: #525252; font-size: 34px; - font-style: normal; font-weight: 500; - line-height: 40px; /* 117.647% */ + line-height: 40px; letter-spacing: -0.68px; - width: 137px; + width: 137px; /* TODO: remove hardcoded values */ } .tokenBalanceSection { display: flex; - flex-direction: row; - align-self: flex-start; margin-top: 8px; width: 100%; } .balanceContent { display: flex; - flex-direction: row; width: 100%; justify-content: flex-end; - } - - .balanceContent > span { - margin-right: 6px; + gap: 6px; } .maxButton { - color: var(--blue-600, #2563eb); + color: #2563eb; border: none; background: none; font-weight: 500; diff --git a/packages/widget/src/components/base-selector/base-selector.ts b/packages/widget/src/components/base-selector/base-selector.ts deleted file mode 100644 index eb2e3010..00000000 --- a/packages/widget/src/components/base-selector/base-selector.ts +++ /dev/null @@ -1,163 +0,0 @@ -import type { Domain, Resource } from '@buildwithsygma/sygma-sdk-core'; -import type { HTMLTemplateResult } from 'lit'; -import { LitElement, html } from 'lit'; -import { customElement, property } from 'lit/decorators.js'; -import { ifDefined } from 'lit/directives/if-defined.js'; -import { map } from 'lit/directives/map.js'; -import { when } from 'lit/directives/when.js'; -import { - capitalize, - renderNetworkIcon, - renderNoNetworkIcon -} from '../../utils'; -import { styles } from './styles'; - -@customElement('base-selector') -export default class BaseSelector extends LitElement { - static styles = styles; - @property({ - type: Boolean - }) - disabled = false; - - @property({ - type: Array, - hasChanged: (n, o) => n !== o - }) - entries?: Domain[] | Resource[]; - - @property({ - type: String - }) - typeSelector: 'network' | 'token' = 'network'; - - @property({ - type: Boolean - }) - networkIcons = false; - - @property({ - type: Number - }) - selectedNetworkChainId?: number; - - @property({ - type: Boolean - }) - isHomechain = false; - - @property({ - type: Object - }) - homechain?: Domain; - - onChange = (event: Event): void => { - const { value } = event.target as HTMLInputElement; - if (this.typeSelector === 'network') { - dispatchEvent( - new CustomEvent('network-change', { - detail: value, - bubbles: true, - composed: true - }) - ); - } else { - dispatchEvent( - new CustomEvent('token-change', { - detail: value, - bubbles: true, - composed: true - }) - ); - } - }; - - renderEntries(): Generator | HTMLTemplateResult { - if (this.entries) { - return map(this.entries, (entry: Domain | Resource, index: number) => { - if (index === 0) { - return html` - `; - } - return html``; - }); - } - return html``; - } - - render(): HTMLTemplateResult { - return html` -
- ${when( - this.networkIcons, - () => { - if (this.typeSelector === 'network') { - console.log( - !!(this.selectedNetworkChainId && this.entries?.length) - ); - - return when( - !!( - this.selectedNetworkChainId && - (this.entries?.length || this.homechain) - ), - () => renderNetworkIcon(this.selectedNetworkChainId as number), - - () => renderNoNetworkIcon() - ); - } - return null; - }, - () => null // do not render network icon slot - )} - -
- `; - } -} diff --git a/packages/widget/src/components/base-selector/index.ts b/packages/widget/src/components/base-selector/index.ts deleted file mode 100644 index 303067ee..00000000 --- a/packages/widget/src/components/base-selector/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from './base-selector'; diff --git a/packages/widget/src/components/base-selector/styles.ts b/packages/widget/src/components/base-selector/styles.ts deleted file mode 100644 index 70c1a677..00000000 --- a/packages/widget/src/components/base-selector/styles.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { css } from 'lit'; - -export const styles = css` - .selector { - width: 100%; - color: var(--neutral-600, #525252); - font-family: Inter; - font-size: 18px; - font-style: normal; - font-weight: 500; - line-height: 26px; - border: none; - } - .selectorSection { - display: flex; - align-items: center; - gap: 12px; - align-self: stretch; - width: inherit; - } -`; diff --git a/packages/widget/src/components/index.ts b/packages/widget/src/components/index.ts index 49157449..35b47082 100644 --- a/packages/widget/src/components/index.ts +++ b/packages/widget/src/components/index.ts @@ -1 +1,2 @@ -export { default } from './widget-app'; +export { AmountSelector } from './amount-selector'; +export { NetworkSelector } from './network-selector'; diff --git a/packages/widget/src/components/network-selector/index.ts b/packages/widget/src/components/network-selector/index.ts index 91a36760..0c892a6d 100644 --- a/packages/widget/src/components/network-selector/index.ts +++ b/packages/widget/src/components/network-selector/index.ts @@ -1 +1 @@ -export { default } from './network-selector'; +export { NetworkSelector } from './network-selector'; diff --git a/packages/widget/src/components/network-selector/network-selector.ts b/packages/widget/src/components/network-selector/network-selector.ts index ab86663c..21f18f42 100644 --- a/packages/widget/src/components/network-selector/network-selector.ts +++ b/packages/widget/src/components/network-selector/network-selector.ts @@ -1,78 +1,87 @@ -import type { - EthereumConfig, - SubstrateConfig -} from '@buildwithsygma/sygma-sdk-core'; -import type { HTMLTemplateResult } from 'lit'; -import { LitElement, html } from 'lit'; +import type { Domain } from '@buildwithsygma/sygma-sdk-core'; +import { LitElement, html, type HTMLTemplateResult } from 'lit'; import { customElement, property } from 'lit/decorators.js'; -import '../base-selector'; +import { map } from 'lit/directives/map.js'; +import { capitalize } from '../../utils'; import { styles } from './styles'; -const directions = { - from: 'From', - to: 'To' -}; +export const Directions = { + FROM: 'From', + TO: 'To' +} as const; -@customElement('network-selector') -export default class NetworkSelector extends LitElement { - static styles = styles; +type Direction = (typeof Directions)[keyof typeof Directions]; - @property({ - type: Array, - hasChanged: (n, o) => n !== o - }) - domains?: EthereumConfig[] | SubstrateConfig[]; +@customElement('sygma-network-selector') +export class NetworkSelector extends LitElement { + static styles = styles; @property({ type: Boolean }) - isHomechain = false; + disabled = false; @property({ - type: Object, - hasChanged: (n, o) => n !== o + type: Boolean }) - homechain?: EthereumConfig | SubstrateConfig; + icons = true; @property({ type: String }) - directionLabel?: 'from' | 'to'; + direction?: Direction; @property({ - type: Number, - hasChanged: (n, o) => n !== o + type: Object }) - selectedNetworkChainId?: number; + selected?: Domain; @property({ - type: Boolean + attribute: false }) - networkIcons = false; + onNetworkSelected?: (network?: Domain) => void; @property({ - type: Boolean + type: Array }) - disabled = false; + networks: Domain[] = []; + + onChange({ target }: Event): void { + const { value } = target as HTMLOptionElement; + const network = this.networks.find((n) => String(n.chainId) == value); + this.onNetworkSelected?.(network); + } + + renderEntries(): Generator | HTMLTemplateResult { + if (this.networks) { + return map(this.networks, (entry: Domain) => { + // TODO: render network icon + return html``; + }); + } + return html``; + } render(): HTMLTemplateResult { - return html` -
- + +
+ +
+
`; + } +} +declare global { + interface HTMLElementTagNameMap { + 'sygma-network-selector': NetworkSelector; } } diff --git a/packages/widget/src/components/network-selector/styles.ts b/packages/widget/src/components/network-selector/styles.ts index 61cca17c..845dd49d 100644 --- a/packages/widget/src/components/network-selector/styles.ts +++ b/packages/widget/src/components/network-selector/styles.ts @@ -3,29 +3,42 @@ import { css } from 'lit'; export const styles = css` .selectorContainer { border-radius: 24px; - border: 1px solid var(--zinc-200, #e4e4e7); + border: 1px solid #e4e4e7; display: flex; width: 314px; padding: 12px 16px; flex-direction: column; justify-content: center; - align-items: flex-start; + align-items: stretch; gap: 4px; } + .directionLabel { - color: var(--zinc-400, #a1a1aa); - font-family: Inter; + color: #a1a1aa; font-size: 14px; - font-style: normal; font-weight: 500; line-height: 20px; display: flex; flex-direction: column; justify-content: center; - flex: 1 0 0; - align-self: stretch; } + .baseSelector { width: 100%; } + + .selector { + width: 100%; + color: #525252; + font-size: 18px; + font-weight: 500; + line-height: 26px; + border: none; + } + + .selectorSection { + display: flex; + align-items: center; + gap: 12px; + } `; diff --git a/packages/widget/src/components/widget-app/index.ts b/packages/widget/src/components/widget-app/index.ts deleted file mode 100644 index 49157449..00000000 --- a/packages/widget/src/components/widget-app/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default } from './widget-app'; diff --git a/packages/widget/src/components/widget-app/styles.ts b/packages/widget/src/components/widget-app/styles.ts deleted file mode 100644 index ad441b4e..00000000 --- a/packages/widget/src/components/widget-app/styles.ts +++ /dev/null @@ -1,95 +0,0 @@ -import { css } from 'lit'; - -export const styles = css` - .widgetContainer { - display: flex; - flex-direction: column; - align-items: center; - padding: 24px; - width: 350px; - height: 476px; - padding: 24px; - border-radius: 12px; - border: 1px solid var(--gray-100, #f3f4f6); - background: #fff; - - box-shadow: - 0px 4px 6px -1px rgba(0, 0, 0, 0.1), - 0px 2px 4px -1px rgba(0, 0, 0, 0.06); - - font-family: 'Bungee Spice'; - } - - .switchNetwork { - display: flex; - flex-direction: row; - justify-content: flex-end; - color: var(--neutral-600, #525252); - text-align: right; - font-family: Inter; - font-size: 14px; - font-style: normal; - font-weight: 500; - line-height: 18px; - } - - .switchNetwork > span:nth-child(2) { - margin-left: 4px; - } - - .actionButton { - display: flex; - width: 314px; - padding: 12px 20px; - justify-content: center; - align-items: center; - gap: 8px; - border-radius: 16px; - background: var(--primary-300, #a5b4fc); - color: #ffffff; - border: none; - font-family: Inter; - font-weight: 500; - font-size: 16px; - } - - .actionButton:hover { - cursor: pointer; - } - - .actionButton:active { - background: var(--primary-500-main, #6366f1); - } - - .actionButtonReady { - display: flex; - width: 314px; - padding: 12px 20px; - justify-content: center; - align-items: center; - gap: 8px; - border-radius: 16px; - background: var(--primary-500-main, #6366f1); - color: #ffffff; - border: none; - } - - .actionButtonReady:active { - background: var(--primary-300, #a5b4fc); - } - - .actionButtonReady:hover { - cursor: pointer; - } - - .poweredBy { - display: flex; - flex-direction: row; - justify-content: flex-start; - margin-top: 16px; - } - - .poweredBy > span:nth-child(2) { - margin-left: 6px; - } -`; diff --git a/packages/widget/src/components/widget-app/widget-app.ts b/packages/widget/src/components/widget-app/widget-app.ts deleted file mode 100644 index f4887edf..00000000 --- a/packages/widget/src/components/widget-app/widget-app.ts +++ /dev/null @@ -1,192 +0,0 @@ -import type { HTMLTemplateResult } from 'lit'; -import { LitElement, html } from 'lit'; -import { customElement } from 'lit/decorators.js'; - -import type { - EthereumConfig, - EvmResource, - SubstrateConfig -} from '@buildwithsygma/sygma-sdk-core'; -import { Environment, Network } from '@buildwithsygma/sygma-sdk-core'; - -import { getEvmErc20Balance } from '@buildwithsygma/sygma-sdk-core/evm'; - -import './widget-view'; -import { ethers } from 'ethers'; -import WidgetMixin from './widget-mixin'; - -@customElement('widget-app') -export default class WidgetApp extends WidgetMixin(LitElement) { - handleTransfer = async (): Promise => {}; - - async getChainId(): Promise { - if (this.walletManager?.evmWallet?.web3Provider) { - return (await this.walletManager?.evmWallet?.web3Provider?.getNetwork()) - ?.chainId; - } - } - - async connectedCallback(): Promise { - super.connectedCallback(); - this.chainId = await this.getChainId(); - - this.walletManager?.addAccountChangedEventListener(() => { - this.requestUpdate(); - }); - - this.walletManager?.addChainChangedEventListener(async () => { - this.chainId = ( - await this.walletManager?.evmWallet?.web3Provider?.getNetwork() - )?.chainId; - - void this.initSdk(); - - this.requestUpdate(); - }); - - // listen to the custom event for network change - addEventListener('network-change', (event: unknown) => { - const { detail } = event as CustomEvent; - this.selectedNetworkChainId = Number(detail); - this.requestUpdate(); - }); - - addEventListener('amount-selector-change', (event: unknown) => { - const { detail } = event as CustomEvent; - this.selectedAmount = Number(detail); - this.requestUpdate(); - }); - - addEventListener('token-change', (event: unknown) => { - const { detail } = event as CustomEvent; - - this.selectedToken = detail; - - const tokenInfo = this.resources?.find( - (resource) => resource.resourceId === this.selectedToken - ); - - this.tokenName = tokenInfo?.symbol; - - if (this.homechain?.type === Network.EVM) { - this.selectedTokenAddress = (tokenInfo as EvmResource).address; - - void this.fetchTokenBalance().then(() => this.requestUpdate()); - } else { - this.requestUpdate(); - } - }); - - addEventListener('connectionInitialized', (event: unknown) => { - const { detail } = event as CustomEvent<{ - connectionInitialized: boolean; - }>; - - if (detail.connectionInitialized) { - void this.connect(); - } - }); - } - - async initSdk(): Promise { - if (!this.walletManager?.evmWallet?.web3Provider) { - throw new Error('No provider'); - } - await this.sdkManager?.initializeSdk( - this.walletManager.evmWallet?.web3Provider, - Environment.TESTNET - ); - - const domains = this.sdkManager?.assetTransfer.config.getDomains(); - this.domains = domains as EthereumConfig[] | SubstrateConfig[]; - - this.homechain = - this.sdkManager?.assetTransfer.config.getSourceDomainConfig(); - - this.resources = this.homechain?.resources; - - this.destinationDomains = this.domains?.filter( - (domain) => domain.chainId !== this.chainId - ) as EthereumConfig[] | SubstrateConfig[]; - - if (!this.chainId) { - this.chainId = await this.getChainId(); - } - - this.requestUpdate(); - } - - connect = async (): Promise => { - await this.walletManager?.connectEvmWallet(); - await this.initSdk(); - this.requestUpdate(); - }; - - async createTransfer(): Promise { - if (!this.walletManager?.evmWallet?.address) { - throw new Error('No wallet connected'); - } - await this.sdkManager?.initializeTransfer( - this.walletManager.evmWallet.address, - this.chainId === 11155111 ? 5 : 11155111, - this.walletManager.evmWallet.address, - '0x0000000000000000000000000000000000000000000000000000000000000300', - '5000000000000000000' // 18 decimal places - ); - this.requestUpdate(); - } - - async approveTokens(): Promise { - if (!this.sdkManager) { - throw new Error('SDK Manager not initialized'); - } - if (!this.walletManager?.evmWallet?.signer) { - throw new Error('No wallet connected'); - } - await this.sdkManager.performApprovals(this.walletManager.evmWallet.signer); - this.requestUpdate(); - } - - async performDeposit(): Promise { - if (!this.sdkManager) { - throw new Error('SDK Manager not initialized'); - } - if (!this.walletManager?.evmWallet?.signer) { - throw new Error('No wallet connected'); - } - await this.sdkManager.performDeposit(this.walletManager.evmWallet.signer); - this.requestUpdate(); - } - - async fetchTokenBalance(): Promise { - if (this.homechain?.type === Network.EVM && this.selectedTokenAddress) { - const balance = await getEvmErc20Balance( - this.walletManager?.accountData as string, - this.selectedTokenAddress, - this.walletManager?.evmWallet - ?.web3Provider as ethers.providers.Web3Provider - ); - - this.tokenBalance = ethers.utils.formatUnits(balance, 18); - } - } - - render(): HTMLTemplateResult { - return html` - - `; - } -} diff --git a/packages/widget/src/components/widget-app/widget-mixin.ts b/packages/widget/src/components/widget-app/widget-mixin.ts deleted file mode 100644 index b7235eef..00000000 --- a/packages/widget/src/components/widget-app/widget-mixin.ts +++ /dev/null @@ -1,77 +0,0 @@ -import type { Constructor } from '@lit/reactive-element/decorators/base.js'; -import type { LitElement } from 'lit'; -import { state } from 'lit/decorators.js'; -import { consume } from '@lit/context'; -import type { - EthereumConfig, - Resource, - SubstrateConfig -} from '@buildwithsygma/sygma-sdk-core'; -import type { IWidgetMixin } from '../../interfaces'; -import type { SdkManager, WalletManagerController } from '../../controllers'; -import { SdkManagerContext, WalletManagerContext } from '../../controllers'; - -const WidgetMixin = >( - superClass: T -): Constructor & T => { - class Mixin extends superClass { - @consume({ context: WalletManagerContext, subscribe: true }) - @state() - walletManager?: WalletManagerController; - - @consume({ context: SdkManagerContext, subscribe: true }) - @state() - sdkManager?: SdkManager; - - @state() - chainId?: number; - - @state({ - hasChanged: (n, o) => n !== o - }) - domains?: EthereumConfig[] | SubstrateConfig[]; - - @state({ - hasChanged: (n, o) => n !== o - }) - homechain?: EthereumConfig | SubstrateConfig; - - @state({ - hasChanged: (n, o) => n !== o - }) - selectedNetworkChainId?: number; - - @state({ - hasChanged: (n, o) => n !== o - }) - destinationDomains?: EthereumConfig[] | SubstrateConfig[]; - - @state({ - hasChanged: (n, o) => n !== o - }) - resources?: Resource[]; - - @state({ - hasChanged: (n, o) => n !== o - }) - selectedAmount?: number; - - @state({ - hasChanged: (n, o) => n !== o - }) - selectedToken?: Pick; - - @state() - selectedTokenAddress?: string; - - @state() - tokenBalance?: string; - - @state() - tokenName?: string; - } - - return Mixin as Constructor & T; -}; - -export default WidgetMixin; diff --git a/packages/widget/src/components/widget-app/widget-view.ts b/packages/widget/src/components/widget-app/widget-view.ts deleted file mode 100644 index 5843dd58..00000000 --- a/packages/widget/src/components/widget-app/widget-view.ts +++ /dev/null @@ -1,151 +0,0 @@ -import type { - EthereumConfig, - Resource, - SubstrateConfig -} from '@buildwithsygma/sygma-sdk-core'; -import type { HTMLTemplateResult } from 'lit'; -import { LitElement, html } from 'lit'; -import { customElement, property, state } from 'lit/decorators.js'; -import { when } from 'lit/directives/when.js'; -import { switchNetworkIcon, sygmaLogo } from '../../assets'; -import '../network-selector'; -import '../amount-selector'; -import type { WalletManagerController } from '../../controllers'; -import { styles } from './styles'; - -@customElement('widget-view') -export class WidgetView extends LitElement { - static styles = styles; - @property({ - type: Number - }) - chainId?: number; - - @property({ - type: Object - }) - domains?: EthereumConfig[] | SubstrateConfig[]; - - @property({ - type: Object - }) - homechain?: EthereumConfig | SubstrateConfig; - - @property({ - type: Number - }) - selectedNetworkChainId?: number; - - @property({ - type: Object - }) - destinationDomains?: EthereumConfig[] | SubstrateConfig[]; - - @property({ - type: Object - }) - resources?: Resource[]; - - @property({ - type: Number - }) - selectedAmount?: number; - - @property({ - type: Object - }) - selectedToken?: Pick; - - @property({ - type: Object - }) - handleTransfer?: (e: Event) => void; - - @property({ - type: Object - }) - walletManager?: WalletManagerController; - - @property({ - type: Number - }) - tokenBalance?: string; - - @state() - connectionInitialized: boolean = false; - - initConnect = (): void => { - this.connectionInitialized = true; - dispatchEvent( - new CustomEvent('connectionInitialized', { - detail: { connectionInitialized: this.connectionInitialized }, - bubbles: true, - composed: true - }) - ); - }; - - render(): HTMLTemplateResult { - return html` -
-
-
- ${switchNetworkIcon} - Switch Network -
-
- -
-
- -
-
- - -
-
- Transfer to the same address -
-
- ${when( - !this.walletManager || !this.walletManager.accountData, - () => - html``, - () => - html` ` - )} -
-
- ${sygmaLogo} - Powered by Sygma -
-
- - `; - } -} diff --git a/packages/widget/src/controllers/index.ts b/packages/widget/src/controllers/index.ts index 0b2b6a63..392cfeb8 100644 --- a/packages/widget/src/controllers/index.ts +++ b/packages/widget/src/controllers/index.ts @@ -1,2 +1 @@ export * from './wallet-manager'; -export * from './sdk-manager'; diff --git a/packages/widget/src/controllers/sdk-manager/SdkManager.ts b/packages/widget/src/controllers/sdk-manager/SdkManager.ts deleted file mode 100644 index 433206a0..00000000 --- a/packages/widget/src/controllers/sdk-manager/SdkManager.ts +++ /dev/null @@ -1,128 +0,0 @@ -import type { - EvmFee, - Fungible, - Transfer -} from '@buildwithsygma/sygma-sdk-core'; -import { EVMAssetTransfer, Environment } from '@buildwithsygma/sygma-sdk-core'; -import type { - BaseProvider, - TransactionRequest -} from '@ethersproject/providers'; -import type { UnsignedTransaction } from '@ethersproject/transactions'; -import type { Signer } from 'ethers'; -import type { SdkManagerState, SdkManagerStatus } from './types'; - -export class SdkManager implements SdkManagerState { - assetTransfer: EVMAssetTransfer; - status: SdkManagerStatus; - transfer?: Transfer; - fee?: EvmFee; - approvalTxs?: UnsignedTransaction[]; - depositTx?: UnsignedTransaction; - - constructor() { - this.assetTransfer = new EVMAssetTransfer(); - this.status = 'idle'; - } - - async checkSourceNetwork(provider: BaseProvider): Promise { - const providerChainId = (await provider.getNetwork()).chainId; - const validEnvDomains = this.assetTransfer.config - .getDomains() - .map((domain) => domain.chainId); - - if (!validEnvDomains.includes(providerChainId)) { - this.status = 'invalidSourceNetwork'; - } else { - this.status = 'initialized'; - } - } - - async initializeSdk( - provider: BaseProvider, - env: Environment = Environment.MAINNET - ): Promise { - await this.assetTransfer.init(provider, env); - await this.checkSourceNetwork(provider); - } - - async initializeTransfer( - fromAddress: string, - destinationChainId: number, - destinationAddress: string, - resourceId: string, - amount: string - ): Promise { - const transfer = await this.assetTransfer.createFungibleTransfer( - fromAddress, - destinationChainId, - destinationAddress, - resourceId, - amount - ); - - const fee = await this.assetTransfer.getFee(transfer); - - const approvals = await this.assetTransfer.buildApprovals(transfer, fee); - - this.transfer = transfer; - this.fee = fee; - this.approvalTxs = approvals; - this.status = - approvals.length > 0 ? 'transferCreated' : 'approvalsCompleted'; - - this.depositTx = await this.assetTransfer.buildTransferTransaction( - transfer, - fee - ); - } - - async performApprovals(signer: Signer): Promise { - if (!this.transfer) { - throw new Error('No transfer'); - } - - if (!this.approvalTxs) { - throw new Error('No approvals'); - } - - if (!this.fee) { - throw new Error('No fee'); - } - - for (const approval of this.approvalTxs) { - await ( - await signer.sendTransaction(approval as TransactionRequest) - ).wait(); - } - - const approvals = await this.assetTransfer.buildApprovals( - this.transfer, - this.fee - ); - - this.approvalTxs = approvals; - if (!approvals?.length) { - this.status = 'approvalsCompleted'; - this.depositTx = await this.assetTransfer.buildTransferTransaction( - this.transfer, - this.fee - ); - } - } - - async performDeposit(signer: Signer): Promise { - if (!this.transfer) { - throw new Error('No transfer'); - } - - if (!this.depositTx) { - throw new Error('No deposit'); - } - - await ( - await signer.sendTransaction(this.depositTx as TransactionRequest) - ).wait(); - this.status = 'deposited'; - } -} diff --git a/packages/widget/src/controllers/sdk-manager/SdkManagerContextProvider.ts b/packages/widget/src/controllers/sdk-manager/SdkManagerContextProvider.ts deleted file mode 100644 index 7fa07e27..00000000 --- a/packages/widget/src/controllers/sdk-manager/SdkManagerContextProvider.ts +++ /dev/null @@ -1,99 +0,0 @@ -import type { Environment } from '@buildwithsygma/sygma-sdk-core'; -import { consume, createContext, provide } from '@lit/context'; -import type { HTMLTemplateResult } from 'lit'; -import { LitElement, html } from 'lit'; -import { customElement, state } from 'lit/decorators.js'; -import type { WalletManagerController } from '..'; -import { WalletManagerContext } from '..'; -import { SdkManager } from './SdkManager'; -import type { SdkManagerState } from './types'; - -export const SdkManagerContext = createContext( - 'sdk-context' -); - -/** - * @name SdkManagerContextProvider - * @description This component is responsible for providing the SdkManagerController as a context to all its children. - * - * @example - * For you to consume the context objects, you need to wrap up your component with the sdk-manager-context on your render method. - * - * - * - * - * - * - */ - -@customElement('sdk-manager-context-provider') -export class SdkManagerContextProvider extends LitElement { - @consume({ context: WalletManagerContext, subscribe: true }) - @state() - walletManager?: WalletManagerController; - - @provide({ context: SdkManagerContext }) - @state() - sdkManager?: SdkManager; - - constructor() { - super(); - this.sdkManager = new SdkManager(); - } - - async initializeSdk(env?: Environment): Promise { - if (!this.walletManager?.provider) { - throw new Error('No wallet connected'); - } - - await this.sdkManager?.initializeSdk(this.walletManager.provider, env); - } - - async initializeTransfer( - fromAddress: string, - destinationChainId: number, - destinationAddress: string, - resourceId: string, - amount: string - ): Promise { - if (!this.walletManager?.provider) { - throw new Error('No wallet connected'); - } - - if (!this.sdkManager) { - throw new Error('SdkManager not initialized'); - } - - if (this.sdkManager.status !== 'initialized') { - throw new Error('SdkManager not initialized'); - } - - await this.sdkManager.initializeTransfer( - fromAddress, - destinationChainId, - destinationAddress, - resourceId, - amount - ); - } - - connectedCallback(): void { - super.connectedCallback(); - - this.walletManager?.addAccountChangedEventListener(() => { - this.requestUpdate(); - }); - - this.walletManager?.addChainChangedEventListener(() => { - const provider = this.walletManager?.evmWallet?.web3Provider; - if (provider) { - void this.sdkManager?.checkSourceNetwork(provider); - } - this.requestUpdate(); - }); - } - - render(): HTMLTemplateResult { - return html``; - } -} diff --git a/packages/widget/src/controllers/sdk-manager/index.ts b/packages/widget/src/controllers/sdk-manager/index.ts deleted file mode 100644 index 97cf66a1..00000000 --- a/packages/widget/src/controllers/sdk-manager/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -export { - SdkManagerContext, - SdkManagerContextProvider -} from './SdkManagerContextProvider'; - -export { SdkManager } from './SdkManager'; - -export type { SdkManagerState, SdkManagerStatus } from './types/index'; diff --git a/packages/widget/src/controllers/sdk-manager/types/SdkManagerState.ts b/packages/widget/src/controllers/sdk-manager/types/SdkManagerState.ts deleted file mode 100644 index f00fade6..00000000 --- a/packages/widget/src/controllers/sdk-manager/types/SdkManagerState.ts +++ /dev/null @@ -1,33 +0,0 @@ -import type { - EVMAssetTransfer, - Environment, - EvmFee, - Fungible, - Transfer -} from '@buildwithsygma/sygma-sdk-core'; -import type { BaseProvider } from '@ethersproject/providers'; -import type { UnsignedTransaction } from '@ethersproject/transactions'; -import type { Signer } from 'ethers'; -import type { SdkManagerStatus } from './SdkManagerStatus'; - -export type SdkManagerState = { - assetTransfer: EVMAssetTransfer; - status: SdkManagerStatus; - transfer?: Transfer; - fee?: EvmFee; - approvalTxs?: UnsignedTransaction[]; - depositTx?: UnsignedTransaction; - - initializeSdk: (provider: BaseProvider, env?: Environment) => Promise; - initializeTransfer: ( - fromAddress: string, - destinationChainId: number, - destinationAddress: string, - resourceId: string, - amount: string - ) => Promise; - - performApprovals(signer: Signer): Promise; - performDeposit(signer: Signer): Promise; - checkSourceNetwork(provider: BaseProvider): Promise; -}; diff --git a/packages/widget/src/controllers/sdk-manager/types/SdkManagerStatus.ts b/packages/widget/src/controllers/sdk-manager/types/SdkManagerStatus.ts deleted file mode 100644 index ddbfe0af..00000000 --- a/packages/widget/src/controllers/sdk-manager/types/SdkManagerStatus.ts +++ /dev/null @@ -1,8 +0,0 @@ -export type SdkManagerStatus = - | 'idle' - | 'invalidSourceNetwork' - | 'initialized' - | 'transferCreated' - | 'approvalsCompleted' - | 'deposited' - | 'completed'; diff --git a/packages/widget/src/controllers/sdk-manager/types/index.ts b/packages/widget/src/controllers/sdk-manager/types/index.ts deleted file mode 100644 index 59ba173d..00000000 --- a/packages/widget/src/controllers/sdk-manager/types/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export type { SdkManagerState } from './SdkManagerState'; -export type { SdkManagerStatus } from './SdkManagerStatus'; diff --git a/packages/widget/src/controllers/wallet-manager/WalletManagerContext.ts b/packages/widget/src/controllers/wallet-manager/WalletManagerContext.ts deleted file mode 100644 index 39dda659..00000000 --- a/packages/widget/src/controllers/wallet-manager/WalletManagerContext.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { createContext, provide } from '@lit/context'; -import type { ApiPromise } from '@polkadot/api'; -import type { ethers } from 'ethers'; -import type { HTMLTemplateResult } from 'lit'; -import { LitElement, html } from 'lit'; -import { customElement, property, state } from 'lit/decorators.js'; -import { - WalletManagerController, - type WalletManagerController as TWalletManagerController -} from './WalletManagerController'; -import { Network } from './types'; - -export const WalletManagerContext = createContext< - TWalletManagerController | undefined ->('wallet-context'); - -export const AccountContext = createContext( - 'account-context' -); - -/** - * @name WalletManagerContextProvider - * @description This component is responsible for providing the WalletManagerController as a context to all its children. - * It also provides a synthetic event creator function that can be used to dispatch custom events. - * @example - * For you to consume the context objects, you need to wrap up your component with the wallet-manager-context on your render method. - * You can either pass a web3Provider, an apiPromise or a wssConnectionUrl to the component. - * - * Passing a web3Provider and an apiPromise - * - * - * - * - * Passing a wssConnectionUrl - * - * - * - */ -@customElement('wallet-manager-context-provider') -export class WalletManagerContextProvider extends LitElement { - @provide({ context: WalletManagerContext }) - @state() - walletManagerController?: WalletManagerController; - - @property({ type: Object }) - web3Provider?: ethers.providers.Web3Provider; - - @property({ type: Object }) - apiPromise?: ApiPromise; - - @property({ type: String }) - wssConnectionUrl?: string; - - @property({ type: String }) - network: Network; - - constructor() { - super(); - this.network = Network.EVM; - } - - connectedCallback(): void { - this.walletManagerController = new WalletManagerController( - this, - this.network, - { - web3Provider: this.web3Provider, - apiPromise: this.apiPromise, - wssConnectionUrl: this.wssConnectionUrl - } - ); - } - - render(): HTMLTemplateResult { - return html` `; - } -} diff --git a/packages/widget/src/controllers/wallet-manager/WalletManagerController.ts b/packages/widget/src/controllers/wallet-manager/WalletManagerController.ts deleted file mode 100644 index e7f356d5..00000000 --- a/packages/widget/src/controllers/wallet-manager/WalletManagerController.ts +++ /dev/null @@ -1,131 +0,0 @@ -import type { Signer } from '@ethersproject/abstract-signer'; -import type { Web3Provider } from '@ethersproject/providers'; -import type { ApiPromise } from '@polkadot/api'; -import type { ReactiveControllerHost } from 'lit'; -import type { IWalletManagerController } from './interfaces'; -import { customEVMEvents } from './interfaces'; -import type { AddChain } from './types'; -import { Network } from './types'; -import { EvmWallet, SubstrateWallet } from '.'; - -export class WalletManagerController implements IWalletManagerController { - private host: ReactiveControllerHost; - evmWallet?: EvmWallet; - substrateWallet?: SubstrateWallet; - account?: string; - substrateAccount?: string; - - constructor( - host: ReactiveControllerHost, - network: Network, - initArgument: { - web3Provider?: Web3Provider; - apiPromise?: ApiPromise; - wssConnectionUrl?: string; - } - ) { - (this.host = host).addController(this); - - if (network === Network.EVM) { - this.initWeb3Provider(initArgument.web3Provider); - } else if (network === Network.SUBSTRATE && initArgument.apiPromise) { - this.initFromApiPromise(initArgument.apiPromise); - } else if (network === Network.SUBSTRATE && initArgument.wssConnectionUrl) { - void this.initFromWssProvider(initArgument.wssConnectionUrl); - } - } - - hostDisconnected(): void { - if (this.evmWallet) { - this.evmWallet?.removeAllListeners(); - } - } - - public addAccountChangedEventListener( - callback: (account: string) => void - ): void { - this.evmWallet?.addListener( - customEVMEvents.ACCOUNT_CHANGE, - (account: string) => { - this.account = account; - callback(account); - } - ); - } - - public addChainChangedEventListener( - callback: () => void | Promise - ): void { - this.evmWallet?.addListener(customEVMEvents.CHAIN_CHANGE, () => { - this.account = this.evmWallet?.address; - void callback(); - }); - } - - public initWeb3Provider(web3Provider?: Web3Provider): void { - this.evmWallet = new EvmWallet(web3Provider); - } - - public initFromApiPromise(apiPromise: ApiPromise): void { - this.substrateWallet = SubstrateWallet.initFromApiPromise(apiPromise); - } - - public async initFromWssProvider(wssProvider: string): Promise { - this.substrateWallet = - await SubstrateWallet.initFromWssProvider(wssProvider); - } - - public async addChain({ - chainId, - chainName, - rpcUrl, - nativeCurrency - }: AddChain): Promise { - await this.evmWallet?.addChain({ - chainId, - chainName, - rpcUrl, - nativeCurrency - }); - } - - public async connectToSubstrate(): Promise { - await this.substrateWallet?.connect(); - this.substrateAccount = this.substrateWallet?.substrateAccount; - this.host.requestUpdate(); - } - - public async connectEvmWallet(): Promise { - await this.evmWallet?.connect(); - this.account = this.evmWallet?.address; - this.host.requestUpdate(); - } - - public getSigner(): Signer { - if (this.evmWallet?.signer) { - return this.evmWallet.signer; - } else { - throw new Error('EvmWallet not initialized'); - } - } - - get accountData(): string | undefined { - return this.account; - } - - get substrateAccountAddress(): string | undefined { - return this.substrateAccount; - } - - get provider(): Web3Provider | undefined { - return this.evmWallet?.web3Provider; - } - - get apiPromise(): ApiPromise | undefined { - if (this.substrateWallet) { - return this.substrateWallet.apiPromise; - } else { - throw new Error('SubstrateWallet not initialized'); - } - } -} diff --git a/packages/widget/src/controllers/wallet-manager/index.ts b/packages/widget/src/controllers/wallet-manager/index.ts index 98f7052f..aa790999 100644 --- a/packages/widget/src/controllers/wallet-manager/index.ts +++ b/packages/widget/src/controllers/wallet-manager/index.ts @@ -1,10 +1,4 @@ export { EvmWallet, SubstrateWallet } from './wallets'; -export { WalletManagerController } from './WalletManagerController'; -export { - WalletManagerContextProvider, - WalletManagerContext, - AccountContext -} from './WalletManagerContext'; -export { type SyntheticEventCreator, Network } from './types'; +export { Network, type SyntheticEventCreator } from './types'; export { syntheticEventCreator } from './utils'; diff --git a/packages/widget/src/controllers/widget.ts b/packages/widget/src/controllers/widget.ts new file mode 100644 index 00000000..ca9a119b --- /dev/null +++ b/packages/widget/src/controllers/widget.ts @@ -0,0 +1,129 @@ +import type { Domain, Resource } from '@buildwithsygma/sygma-sdk-core'; +import { + Config, + EVMAssetTransfer, + Environment, + Network +} from '@buildwithsygma/sygma-sdk-core'; +import { SubstrateAssetTransfer } from '@buildwithsygma/sygma-sdk-core/substrate'; +import type { ReactiveController, ReactiveControllerHost } from 'lit'; + +export class WidgetController implements ReactiveController { + public isLoading: boolean = false; + public isReadyForTransfer: boolean = false; + public sourceNetwork?: Domain; + public destinationNetwork?: Domain; + public selectedResource?: Resource; + public resourceAmount = 0; + public supportedSourceNetworks: Domain[] = []; + public supportedDestinationNetworks: Domain[] = []; + public supportedResources: Resource[] = []; + + //@ts-expect-error it will be used + private assetTransfer?: EVMAssetTransfer | SubstrateAssetTransfer; + + private env: Environment; + private config: Config; + + host: ReactiveControllerHost; + + constructor(host: ReactiveControllerHost, options: { env?: Environment }) { + (this.host = host).addController(this); + this.env = options.env ?? Environment.MAINNET; + this.config = new Config(); + } + + hostConnected(): void { + void this.init(); + } + + hostDisconnected(): void { + this.assetTransfer = undefined; + this.sourceNetwork = undefined; + this.destinationNetwork = undefined; + this.supportedSourceNetworks = []; + this.supportedDestinationNetworks = []; + } + + private async init(): Promise { + this.isLoading = true; + this.host.requestUpdate(); + await this.config.init(1, this.env); + this.supportedSourceNetworks = this.config.getDomains(); + this.supportedDestinationNetworks = this.config.getDomains(); + this.isLoading = false; + this.host.requestUpdate(); + } + + async makeTransaction(): Promise { + //TODO: trigger next tx from AssetTransfer class (approval or actual transfer) + } + + onConnectWallet = (): void => { + if (this.sourceNetwork) { + switch (this.sourceNetwork.type) { + case Network.EVM: + { + //init EvmWallet + } + break; + case Network.SUBSTRATE: + { + //init SubstrateWallet + } + break; + default: + throw new Error('Unsupported network type'); + } + } + }; + + onSourceNetworkSelected = (network: Domain | undefined): void => { + console.log('source', network); + //TODO: filter out supported destination networks + this.sourceNetwork = network; + if (!network) { + this.supportedResources = []; + //disconnect wallet + return; + } + switch (network.type) { + case Network.EVM: + { + this.sourceNetwork = network; + this.assetTransfer = new EVMAssetTransfer(); + } + break; + case Network.SUBSTRATE: + { + this.sourceNetwork = network; + this.assetTransfer = new SubstrateAssetTransfer(); + } + break; + default: + throw new Error('Unsupported network type'); + } + //TODO: reinit config + this.supportedResources = this.config.getDomainResources(); + this.host.requestUpdate(); + }; + + onDestinationNetworkSelected = (network: Domain | undefined): void => { + console.log('destination', network); + if (!this.sourceNetwork) { + //TODO: filter out supported source networks + } + this.destinationNetwork = network; + this.host.requestUpdate(); + }; + + onResourceSelected = (resource: Resource): void => { + console.log('resource', resource); + this.selectedResource = resource; + }; + + onResourceAmountChange = (amount: number): void => { + console.log('resource amount', amount); + this.resourceAmount = amount; + }; +} diff --git a/packages/widget/src/interfaces/index.ts b/packages/widget/src/interfaces/index.ts deleted file mode 100644 index 5b4998d1..00000000 --- a/packages/widget/src/interfaces/index.ts +++ /dev/null @@ -1,22 +0,0 @@ -import type { - EthereumConfig, - Resource, - SubstrateConfig -} from '@buildwithsygma/sygma-sdk-core'; -import type { SdkManager, WalletManagerController } from '../controllers'; - -export interface IWidgetMixin { - walletManager?: WalletManagerController; - sdkManager?: SdkManager; - chainId?: number; - domains?: EthereumConfig[] | SubstrateConfig[]; - homechain?: EthereumConfig | SubstrateConfig; - selectedNetworkChainId?: number; - destinationDomains?: EthereumConfig[] | SubstrateConfig[]; - resources?: Resource[]; - selectedAmount?: number; - selectedToken?: string; - selectedTokenAddress?: string; - tokenBalance?: string; - tokenName?: string; -} diff --git a/packages/widget/src/styles.ts b/packages/widget/src/styles.ts index 2e973df0..3b8120f7 100644 --- a/packages/widget/src/styles.ts +++ b/packages/widget/src/styles.ts @@ -7,4 +7,91 @@ export const styles = css` font-weight: 500; src: url('https://fonts.googleapis.com/css2?family=Inter:wght@200..900'); } + + .widgetContainer { + display: flex; + flex-direction: column; + align-items: center; + gap: 16px; + + padding: 24px; + width: 350px; /* TODO: remove these hardcoded values */ + height: 476px; /* TODO: ↑ */ + border-radius: 12px; + border: 1px solid #f3f4f6; + background-color: #fff; + + box-shadow: + 0 4px 6px -1px rgba(0, 0, 0, 0.1), + 0 2px 4px -1px rgba(0, 0, 0, 0.06); + + font-family: Inter, sans-serif; + } + + .connectAccount { + display: flex; + justify-content: flex-end; + align-items: center; + gap: 4px; + } + + .actionButton { + display: flex; + justify-content: center; + align-items: center; + gap: 8px; + + border-radius: 16px; + border: none; + background-color: #a5b4fc; + color: #ffffff; + + width: 314px; /* TODO: remove these hardcoded values */ + padding: 12px 20px; + + font-weight: 500; + font-size: 16px; + } + + .actionButton:hover { + cursor: pointer; + } + + .actionButton:active { + background-color: #6366f1; + } + + .actionButtonReady { + display: flex; + justify-content: center; + align-items: center; + gap: 8px; + + width: 100%; + padding: 12px 20px; + + border-radius: 16px; + background-color: #6366f1; + color: #ffffff; + border: none; + } + + .actionButtonReady:active { + background-color: #a5b4fc; + } + + .actionButtonReady:hover { + cursor: pointer; + } + + .poweredBy { + display: flex; + align-items: center; + gap: 6px; + align-self: flex-start; + + color: #525252; + font-size: 12px; + line-height: 150%; + } `; diff --git a/packages/widget/src/widget.ts b/packages/widget/src/widget.ts index 42ebf76c..c2e5cd1c 100644 --- a/packages/widget/src/widget.ts +++ b/packages/widget/src/widget.ts @@ -1,23 +1,77 @@ import type { HTMLTemplateResult } from 'lit'; import { LitElement, html } from 'lit'; import { customElement } from 'lit/decorators.js'; -import './components/widget-app'; import { styles } from './styles'; -import { Network } from './controllers'; +import { switchNetworkIcon, sygmaLogo } from './assets'; +import { WidgetController } from './controllers/widget'; +import './components/network-selector'; +import './components/amount-selector'; +import { Directions } from './components/network-selector/network-selector'; @customElement('sygmaprotocol-widget') class SygmaProtocolWidget extends LitElement { static styles = styles; + private widgetController = new WidgetController(this, {}); + render(): HTMLTemplateResult { - return html` - -
- -
-
-
`; + return html` +

${this.widgetController.isLoading ? 'Loading' : ''}

+
+
{}}> +
+ ${switchNetworkIcon} Connect Wallet +
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+
${sygmaLogo} Powered by Sygma
+
+ `; } } export { SygmaProtocolWidget }; + +declare global { + interface HTMLElementTagNameMap { + 'sygmaprotocol-widget': SygmaProtocolWidget; + } +} diff --git a/packages/widget/tests/unit/components/network-selector/network-selector.test.ts b/packages/widget/tests/unit/components/network-selector/network-selector.test.ts new file mode 100644 index 00000000..674d718c --- /dev/null +++ b/packages/widget/tests/unit/components/network-selector/network-selector.test.ts @@ -0,0 +1,56 @@ +import { getDiffableHTML } from '@open-wc/semantic-dom-diff'; +import { fixture, fixtureCleanup, oneEvent } from '@open-wc/testing-helpers'; +import { html } from 'lit'; +import { afterEach, assert, describe, it, vi } from 'vitest'; +import { NetworkSelector } from '../../../../src/components'; + +describe('network-selector component', function () { + afterEach(() => { + fixtureCleanup(); + }); + + it('is defined', () => { + const el = document.createElement('sygma-network-selector'); + assert.instanceOf(el, NetworkSelector); + }); + it('renders single default option if no network supplied', async () => { + const el = await fixture(html` + + `); + assert.equal(el.shadowRoot!.querySelectorAll('.network-option').length, 1); + assert.equal( + getDiffableHTML(el.shadowRoot!.querySelector('.selector')!), + getDiffableHTML( + `` + ) + ); + }); + it('triggers callback on network selected', async () => { + const mockNetworkSelectHandler = vi.fn(); + const network = { id: 0, chainId: 1, name: 'Test', type: 'evm' }; + const el = await fixture(html` + + `); + const networkOptions = el.shadowRoot!.querySelectorAll('.network-option'); + assert.equal(networkOptions.length, 2); + const listener = oneEvent( + el.shadowRoot!.querySelector('.selector')!, + 'change', + false + ); + (el.shadowRoot!.querySelector('.selector') as HTMLSelectElement).value = + '1'; + el.shadowRoot!.querySelector('.selector')!.dispatchEvent( + new Event('change') + ); + (networkOptions[1] as HTMLOptionElement).selected = true; + await listener; + assert.equal(mockNetworkSelectHandler.mock.calls.length, 1); + assert.deepEqual(mockNetworkSelectHandler.mock.lastCall, [network]); + }); +}); diff --git a/packages/widget/tests/unit/controllers/wallet-manager/EvmWallet.test.ts b/packages/widget/tests/unit/controllers/wallet-manager/EvmWallet.test.ts index f65b01c2..ad52ac5d 100644 --- a/packages/widget/tests/unit/controllers/wallet-manager/EvmWallet.test.ts +++ b/packages/widget/tests/unit/controllers/wallet-manager/EvmWallet.test.ts @@ -1,6 +1,6 @@ -import { ethers } from 'ethers'; import type { ExternalProvider } from '@ethersproject/providers'; -import { describe, it, expect, beforeEach, vi } from 'vitest'; +import { ethers } from 'ethers'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; import { EvmWallet } from '../../../../src/controllers/wallet-manager'; describe('EvmWallet', () => { diff --git a/packages/widget/tests/unit/controllers/wallet-manager/WalletManagerController.test.ts b/packages/widget/tests/unit/controllers/wallet-manager/WalletManagerController.test.ts deleted file mode 100644 index 0b8e23ad..00000000 --- a/packages/widget/tests/unit/controllers/wallet-manager/WalletManagerController.test.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { LitElement } from 'lit'; -import type { ExternalProvider } from '@ethersproject/providers'; -import { ethers } from 'ethers'; -import { describe, it, beforeEach, vi, expect } from 'vitest'; -import { ApiPromise, WsProvider } from '@polkadot/api'; -import { - Network, - WalletManagerController -} from '../../../../src/controllers/wallet-manager'; - -class WidgetTestFixture extends LitElement { - constructor() { - super(); - } -} - -customElements.define('widget-test-fixture', WidgetTestFixture); - -describe('WalletManagerController', () => { - let walletController: WalletManagerController; - const walletTextFixture = new WidgetTestFixture(); - - beforeEach(() => { - window.ethereum = { - request: () => Promise.resolve(true), - on: vi.fn() - } as ExternalProvider & { on: () => void }; - - walletController = new WalletManagerController( - walletTextFixture, - Network.EVM, - { - web3Provider: new ethers.providers.Web3Provider(window.ethereum) - } - ); - }); - - it('should instantiate', () => { - expect(walletController).toBeInstanceOf(WalletManagerController); - }); - it('should initialize evm wallet from window', () => { - expect(walletController.evmWallet).toBeDefined(); - }); - it('should initialize evm wallet from web3 provider', () => { - const provider = new ethers.providers.Web3Provider(window.ethereum); - - walletController = new WalletManagerController( - walletTextFixture, - Network.EVM, - { - web3Provider: provider - } - ); - expect(walletController.evmWallet).toBeDefined(); - }); - //TODO: this should not connect to real network - it.skip('should initialize substrate wallet from wss provider', () => { - walletController = new WalletManagerController( - walletTextFixture, - Network.SUBSTRATE, - { - wssConnectionUrl: 'ws://someurl' - } - ); - expect(walletController.substrateWallet).toBeDefined(); - }); - - //TODO: this should not connect to real network - it.skip('should initialize substrate wallet from api promise', async () => { - const wsProvider = new WsProvider('wss://rpc.polkadot.io'); - const apiPromise = await ApiPromise.create({ provider: wsProvider }); - walletController = new WalletManagerController( - walletTextFixture, - Network.SUBSTRATE, - { - apiPromise - } - ); - expect(walletController.substrateWallet).toBeDefined(); - }); -}); diff --git a/packages/widget/tsconfig.build.json b/packages/widget/tsconfig.build.json deleted file mode 100644 index 398b6a50..00000000 --- a/packages/widget/tsconfig.build.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": "./tsconfig.json", - "include": ["./src/**/*"] -} diff --git a/packages/widget/tsconfig.json b/packages/widget/tsconfig.json index ca566679..d09bb43e 100644 --- a/packages/widget/tsconfig.json +++ b/packages/widget/tsconfig.json @@ -1,7 +1,6 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "rootDir": "./src", "outDir": "build", "declaration": true, "plugins": [ @@ -13,5 +12,5 @@ } ] }, - "include": ["./src/**/*", "tests"] + "include": ["./src", "./tests"] } diff --git a/packages/widget/vite.config.ts b/packages/widget/vite.config.ts index 45c4c611..bea954fd 100644 --- a/packages/widget/vite.config.ts +++ b/packages/widget/vite.config.ts @@ -1,32 +1,20 @@ /// -import { resolve } from 'path'; -import { visualizer } from 'rollup-plugin-visualizer'; -import { PluginOption, defineConfig } from 'vite'; +import { defineConfig } from 'vite'; +import dts from "vite-plugin-dts"; // https://vitejs.dev/config/ export default defineConfig({ + plugins: [ + dts({ rollupTypes: true }), + ], base: '/', build: { + sourcemap: true, outDir: 'build', lib: { entry: 'src/index.ts', formats: ['es'] }, - manifest: true, - rollupOptions: { - input: { - main: resolve(__dirname, 'index.html') - }, - plugins: [ - visualizer({ - template: 'sunburst', // or sunburst - open: false, - gzipSize: true, - brotliSize: true, - filename: 'bundle/analyse.html' // will be saved in project's root - }) as PluginOption - ] - } }, test: { environment: 'jsdom', diff --git a/yarn.lock b/yarn.lock index 9aa1455b..cd7ea558 100644 --- a/yarn.lock +++ b/yarn.lock @@ -23,6 +23,16 @@ __metadata: languageName: node linkType: hard +"@babel/code-frame@npm:^7.12.11": + version: 7.23.5 + resolution: "@babel/code-frame@npm:7.23.5" + dependencies: + "@babel/highlight": "npm:^7.23.4" + chalk: "npm:^2.4.2" + checksum: a10e843595ddd9f97faa99917414813c06214f4d9205294013e20c70fbdf4f943760da37dec1d998bf3e6fc20fa2918a47c0e987a7e458663feb7698063ad7c6 + languageName: node + linkType: hard + "@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.22.9": version: 7.23.2 resolution: "@babel/compat-data@npm:7.23.2" @@ -81,6 +91,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-string-parser@npm:^7.23.4": + version: 7.23.4 + resolution: "@babel/helper-string-parser@npm:7.23.4" + checksum: f348d5637ad70b6b54b026d6544bd9040f78d24e7ec245a0fc42293968181f6ae9879c22d89744730d246ce8ec53588f716f102addd4df8bbc79b73ea10004ac + languageName: node + linkType: hard + "@babel/helper-validator-identifier@npm:^7.22.20": version: 7.22.20 resolution: "@babel/helper-validator-identifier@npm:7.22.20" @@ -95,6 +112,26 @@ __metadata: languageName: node linkType: hard +"@babel/highlight@npm:^7.23.4": + version: 7.23.4 + resolution: "@babel/highlight@npm:7.23.4" + dependencies: + "@babel/helper-validator-identifier": "npm:^7.22.20" + chalk: "npm:^2.4.2" + js-tokens: "npm:^4.0.0" + checksum: fbff9fcb2f5539289c3c097d130e852afd10d89a3a08ac0b5ebebbc055cc84a4bcc3dcfed463d488cde12dd0902ef1858279e31d7349b2e8cee43913744bda33 + languageName: node + linkType: hard + +"@babel/parser@npm:^7.23.6": + version: 7.23.6 + resolution: "@babel/parser@npm:7.23.6" + bin: + parser: ./bin/babel-parser.js + checksum: 6f76cd5ccae1fa9bcab3525b0865c6222e9c1d22f87abc69f28c5c7b2c8816a13361f5bd06bddbd5faf903f7320a8feba02545c981468acec45d12a03db7755e + languageName: node + linkType: hard + "@babel/plugin-transform-runtime@npm:^7.5.5": version: 7.23.2 resolution: "@babel/plugin-transform-runtime@npm:7.23.2" @@ -140,6 +177,17 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.8.3": + version: 7.23.6 + resolution: "@babel/types@npm:7.23.6" + dependencies: + "@babel/helper-string-parser": "npm:^7.23.4" + "@babel/helper-validator-identifier": "npm:^7.22.20" + to-fast-properties: "npm:^2.0.0" + checksum: 42cefce8a68bd09bb5828b4764aa5586c53c60128ac2ac012e23858e1c179347a4aac9c66fc577994fbf57595227611c5ec8270bf0cfc94ff033bbfac0550b70 + languageName: node + linkType: hard + "@buildwithsygma/sygma-contracts@npm:2.4.1": version: 2.4.1 resolution: "@buildwithsygma/sygma-contracts@npm:2.4.1" @@ -198,6 +246,8 @@ __metadata: "@ethersproject/transactions": "npm:^5.7.0" "@lit/context": "npm:^1.1.0" "@lit/reactive-element": "npm:^2.0.3" + "@open-wc/semantic-dom-diff": "npm:^0.20.1" + "@open-wc/testing-helpers": "npm:^3.0.0" "@polkadot/api": "npm:^10.11.2" "@polkadot/extension-dapp": "npm:^0.46.6" eslint: "npm:^8.48.0" @@ -211,6 +261,7 @@ __metadata: typescript: "npm:5.2.2" vite: "npm:4.4.11" vite-plugin-clean: "npm:^1.0.0" + vite-plugin-dts: "npm:^3.7.1" vitest: "npm:^1.2.1" languageName: unknown linkType: soft @@ -1576,6 +1627,58 @@ __metadata: languageName: node linkType: hard +"@microsoft/api-extractor-model@npm:7.28.3": + version: 7.28.3 + resolution: "@microsoft/api-extractor-model@npm:7.28.3" + dependencies: + "@microsoft/tsdoc": "npm:0.14.2" + "@microsoft/tsdoc-config": "npm:~0.16.1" + "@rushstack/node-core-library": "npm:3.62.0" + checksum: 776ae84e8398358469c4d2d3798206f268e780ab03c9212f062506f149e8fa59047aefa7046334a5ef199b28c3ed5fca0c708bfa7da929f7ce86c0440ca78ce3 + languageName: node + linkType: hard + +"@microsoft/api-extractor@npm:7.39.0": + version: 7.39.0 + resolution: "@microsoft/api-extractor@npm:7.39.0" + dependencies: + "@microsoft/api-extractor-model": "npm:7.28.3" + "@microsoft/tsdoc": "npm:0.14.2" + "@microsoft/tsdoc-config": "npm:~0.16.1" + "@rushstack/node-core-library": "npm:3.62.0" + "@rushstack/rig-package": "npm:0.5.1" + "@rushstack/ts-command-line": "npm:4.17.1" + colors: "npm:~1.2.1" + lodash: "npm:~4.17.15" + resolve: "npm:~1.22.1" + semver: "npm:~7.5.4" + source-map: "npm:~0.6.1" + typescript: "npm:5.3.3" + bin: + api-extractor: bin/api-extractor + checksum: 6f1c0f770f2c26013fb1e4d382a77f923efef45fcde8e8ab951ac487697132c0548693d040fec24e257b6adcf6f607a4fcead0a15a328a7f0b8113debec8c993 + languageName: node + linkType: hard + +"@microsoft/tsdoc-config@npm:~0.16.1": + version: 0.16.2 + resolution: "@microsoft/tsdoc-config@npm:0.16.2" + dependencies: + "@microsoft/tsdoc": "npm:0.14.2" + ajv: "npm:~6.12.6" + jju: "npm:~1.4.0" + resolve: "npm:~1.19.0" + checksum: 9e8c176b68f01c8bb38e6365d5b543e471bba59fced6070d9bd35b32461fbd650c2e1a6f686e8dca0cf22bc5e7d796e4213e66bce4426c8cb9864c1f6ca6836c + languageName: node + linkType: hard + +"@microsoft/tsdoc@npm:0.14.2": + version: 0.14.2 + resolution: "@microsoft/tsdoc@npm:0.14.2" + checksum: c018857ad439144559ce34a397a29ace7cf5b24b999b8e3c1b88d878338088b3a453eaac4435beaf2c7eae13c4c0aac81e42f96f0f1d48e8d4eeb438eb3bb82f + languageName: node + linkType: hard + "@noble/curves@npm:^1.2.0": version: 1.2.0 resolution: "@noble/curves@npm:1.2.0" @@ -1662,6 +1765,44 @@ __metadata: languageName: node linkType: hard +"@open-wc/dedupe-mixin@npm:^1.4.0": + version: 1.4.0 + resolution: "@open-wc/dedupe-mixin@npm:1.4.0" + checksum: 22a1362c358b5f011e8f1b8923ad3f2287f493a7d016feeea82cae8df9357c7ebf06f7e7e2c70d9ec4bc214361335eead2ca27767d877c253544db2462fb73e5 + languageName: node + linkType: hard + +"@open-wc/scoped-elements@npm:^3.0.2": + version: 3.0.4 + resolution: "@open-wc/scoped-elements@npm:3.0.4" + dependencies: + "@open-wc/dedupe-mixin": "npm:^1.4.0" + lit: "npm:^3.0.0" + checksum: af6c4c0ea3941315c2784bcb74d5ef945b671fcc374c7870fde3992bb8acd5dfa2c670d0126284d729e1167f22ebb28fe4486ea7ec4fe7d3fdf5d460666ed085 + languageName: node + linkType: hard + +"@open-wc/semantic-dom-diff@npm:^0.20.1": + version: 0.20.1 + resolution: "@open-wc/semantic-dom-diff@npm:0.20.1" + dependencies: + "@types/chai": "npm:^4.3.1" + "@web/test-runner-commands": "npm:^0.9.0" + checksum: 7e08135d03cba5212dfc3f788fb0b66fb8f506ab5c400a02522ce9f15009116fee8679c4915669e7461065ebcb2039a34168fbdbdfdd875fbfa01abf0967b3d4 + languageName: node + linkType: hard + +"@open-wc/testing-helpers@npm:^3.0.0": + version: 3.0.0 + resolution: "@open-wc/testing-helpers@npm:3.0.0" + dependencies: + "@open-wc/scoped-elements": "npm:^3.0.2" + lit: "npm:^2.0.0 || ^3.0.0" + lit-html: "npm:^2.0.0 || ^3.0.0" + checksum: 351866397d7917228f1cc78337d55eade19a3b169194f94dd06c47adb0b0712a4c14ca67c2df55bb7303a8e02058bd8d8234fbde57b3980154597412f95cf1c3 + languageName: node + linkType: hard + "@openzeppelin/contracts@npm:^4.5.0": version: 4.9.5 resolution: "@openzeppelin/contracts@npm:4.9.5" @@ -2405,6 +2546,22 @@ __metadata: languageName: node linkType: hard +"@rollup/pluginutils@npm:^5.1.0": + version: 5.1.0 + resolution: "@rollup/pluginutils@npm:5.1.0" + dependencies: + "@types/estree": "npm:^1.0.0" + estree-walker: "npm:^2.0.2" + picomatch: "npm:^2.3.1" + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + checksum: c7bed15711f942d6fdd3470fef4105b73991f99a478605e13d41888963330a6f9e32be37e6ddb13f012bc7673ff5e54f06f59fd47109436c1c513986a8a7612d + languageName: node + linkType: hard + "@rollup/rollup-android-arm-eabi@npm:4.9.5": version: 4.9.5 resolution: "@rollup/rollup-android-arm-eabi@npm:4.9.5" @@ -2496,6 +2653,48 @@ __metadata: languageName: node linkType: hard +"@rushstack/node-core-library@npm:3.62.0": + version: 3.62.0 + resolution: "@rushstack/node-core-library@npm:3.62.0" + dependencies: + colors: "npm:~1.2.1" + fs-extra: "npm:~7.0.1" + import-lazy: "npm:~4.0.0" + jju: "npm:~1.4.0" + resolve: "npm:~1.22.1" + semver: "npm:~7.5.4" + z-schema: "npm:~5.0.2" + peerDependencies: + "@types/node": "*" + peerDependenciesMeta: + "@types/node": + optional: true + checksum: ea75d5c3d8dc14f66300cfc66e26c57f39a9cf057321d3034889a4643a175e275c8d7a9a5524366879fc4608e5a36df7041895ae11c0e2267dc4b5a5e6e5d0b4 + languageName: node + linkType: hard + +"@rushstack/rig-package@npm:0.5.1": + version: 0.5.1 + resolution: "@rushstack/rig-package@npm:0.5.1" + dependencies: + resolve: "npm:~1.22.1" + strip-json-comments: "npm:~3.1.1" + checksum: a296125a5170dd11c37c3d679eb6e61db4d0c0741b3947902d9eab34e9ff34d5d8e94fbf6b45757141ea077029490198b7eb35d311ba46eaac5e1d4145e9780c + languageName: node + linkType: hard + +"@rushstack/ts-command-line@npm:4.17.1": + version: 4.17.1 + resolution: "@rushstack/ts-command-line@npm:4.17.1" + dependencies: + "@types/argparse": "npm:1.0.38" + argparse: "npm:~1.0.9" + colors: "npm:~1.2.1" + string-argv: "npm:~0.3.1" + checksum: 4fd27d2450a6e71139e67b33d5ecba7abbf3497e7479ab3a96666cf79f207c5a7d4ad4f8de17f43e09bed65a0f28115160a4c5486c8e64f8b472c7145a31c2d2 + languageName: node + linkType: hard + "@scure/base@npm:^1.1.3, @scure/base@npm:~1.1.0": version: 1.1.3 resolution: "@scure/base@npm:1.1.3" @@ -2632,6 +2831,29 @@ __metadata: languageName: node linkType: hard +"@types/accepts@npm:*": + version: 1.3.7 + resolution: "@types/accepts@npm:1.3.7" + dependencies: + "@types/node": "npm:*" + checksum: 7b21efc78b98ed57063ac31588f871f11501c080cd1201ca3743cf02ee0aee74bdb5a634183bc0987dc8dc582b26316789fd203650319ccc89a66cf88311d64f + languageName: node + linkType: hard + +"@types/argparse@npm:1.0.38": + version: 1.0.38 + resolution: "@types/argparse@npm:1.0.38" + checksum: 4fc892da5df16923f48180da2d1f4562fa8b0507cf636b24780444fa0a1d7321d4dc0c0ecbee6152968823f5a2ae0d321b4f8c705a489bf1ae1245bdeb0868fd + languageName: node + linkType: hard + +"@types/babel__code-frame@npm:^7.0.2": + version: 7.0.6 + resolution: "@types/babel__code-frame@npm:7.0.6" + checksum: 6517ac6ac6b971fb0a8c6f394dc5fc5afbc90d52d85e260dcaba3abdfe97e79b783ac7c6cf05de6494520cafe3b09d934af95c8c6dbc24a62f7846110dd1f838 + languageName: node + linkType: hard + "@types/bn.js@npm:*, @types/bn.js@npm:^5.1.0, @types/bn.js@npm:^5.1.1": version: 5.1.3 resolution: "@types/bn.js@npm:5.1.3" @@ -2650,6 +2872,16 @@ __metadata: languageName: node linkType: hard +"@types/body-parser@npm:*": + version: 1.19.5 + resolution: "@types/body-parser@npm:1.19.5" + dependencies: + "@types/connect": "npm:*" + "@types/node": "npm:*" + checksum: aebeb200f25e8818d8cf39cd0209026750d77c9b85381cdd8deeb50913e4d18a1ebe4b74ca9b0b4d21952511eeaba5e9fbbf739b52731a2061e206ec60d568df + languageName: node + linkType: hard + "@types/cacheable-request@npm:^6.0.1, @types/cacheable-request@npm:^6.0.2": version: 6.0.3 resolution: "@types/cacheable-request@npm:6.0.3" @@ -2662,6 +2894,65 @@ __metadata: languageName: node linkType: hard +"@types/chai@npm:^4.3.1": + version: 4.3.11 + resolution: "@types/chai@npm:4.3.11" + checksum: 0c216ac4a19bfbf8318bb104d32e50704ee2ffc4b538b976c4326e6638fee121462402caa570662227a2a218810388aadb14bdbd3d3d474ec300b00695db448a + languageName: node + linkType: hard + +"@types/co-body@npm:^6.1.0": + version: 6.1.3 + resolution: "@types/co-body@npm:6.1.3" + dependencies: + "@types/node": "npm:*" + "@types/qs": "npm:*" + checksum: 3a716829b7c8fa5b3d18bc47b98756d60b2ebc302ec90601e1ac1aed34bcc1f7ee88f379b2531837a42902d14362bfa29c9ddc2a39bbc8030afc26d66e671b0d + languageName: node + linkType: hard + +"@types/connect@npm:*": + version: 3.4.38 + resolution: "@types/connect@npm:3.4.38" + dependencies: + "@types/node": "npm:*" + checksum: 2e1cdba2c410f25649e77856505cd60223250fa12dff7a503e492208dbfdd25f62859918f28aba95315251fd1f5e1ffbfca1e25e73037189ab85dd3f8d0a148c + languageName: node + linkType: hard + +"@types/content-disposition@npm:*": + version: 0.5.8 + resolution: "@types/content-disposition@npm:0.5.8" + checksum: f10baeab2ec44579012c1170763851687e740ea30531a80cd7a403475730ce7d7ead4f88927cea6970cc2d5e74fa7af38cdf4f039c5f115fba1bb98ec0014977 + languageName: node + linkType: hard + +"@types/convert-source-map@npm:^2.0.0": + version: 2.0.3 + resolution: "@types/convert-source-map@npm:2.0.3" + checksum: 43dd8ccad61489c245342220db74c1baf3b75586074f99609943fe1bdecf7d5dcff0acd038cb0063dd7533a90cc980101d5899afa70a638883752ad8d66de20b + languageName: node + linkType: hard + +"@types/cookies@npm:*": + version: 0.7.10 + resolution: "@types/cookies@npm:0.7.10" + dependencies: + "@types/connect": "npm:*" + "@types/express": "npm:*" + "@types/keygrip": "npm:*" + "@types/node": "npm:*" + checksum: 09f245abbcd9e348ef8a5747a1a7210b21412124cf69add28313f0ac34ad73bc23c03ea8b83aa1708dd1a8e1bbc65bfc167eb9ae8324ecbedc3ec168e2fda2bf + languageName: node + linkType: hard + +"@types/debounce@npm:^1.2.0": + version: 1.2.4 + resolution: "@types/debounce@npm:1.2.4" + checksum: 89db97397312b1273be74b326133af4744e5f63b726016bb6eb5c31b94f07a2f3bd3fb5bc3a3667bce506f01ede46c9abbfb88a4745ee9f34641fb636ab51210 + languageName: node + linkType: hard + "@types/estree@npm:1.0.5, @types/estree@npm:^1.0.0": version: 1.0.5 resolution: "@types/estree@npm:1.0.5" @@ -2678,6 +2969,37 @@ __metadata: languageName: node linkType: hard +"@types/express-serve-static-core@npm:^4.17.33": + version: 4.17.41 + resolution: "@types/express-serve-static-core@npm:4.17.41" + dependencies: + "@types/node": "npm:*" + "@types/qs": "npm:*" + "@types/range-parser": "npm:*" + "@types/send": "npm:*" + checksum: dc166cbf4475c00a81fbcab120bf7477c527184be11ae149df7f26d9c1082114c68f8d387a2926fe80291b06477c8bbd9231ff4f5775de328e887695aefce269 + languageName: node + linkType: hard + +"@types/express@npm:*": + version: 4.17.21 + resolution: "@types/express@npm:4.17.21" + dependencies: + "@types/body-parser": "npm:*" + "@types/express-serve-static-core": "npm:^4.17.33" + "@types/qs": "npm:*" + "@types/serve-static": "npm:*" + checksum: 12e562c4571da50c7d239e117e688dc434db1bac8be55613294762f84fd77fbd0658ccd553c7d3ab02408f385bc93980992369dd30e2ecd2c68c358e6af8fabf + languageName: node + linkType: hard + +"@types/http-assert@npm:*": + version: 1.5.5 + resolution: "@types/http-assert@npm:1.5.5" + checksum: 02e7ba584d6d14bdb4dad05dd36ecbc4a2f4209472287e6d558e222c93182214445a0c6cd096f114bfc88446be03d82ef6db24ecda13922b0d697918c76b4067 + languageName: node + linkType: hard + "@types/http-cache-semantics@npm:*": version: 4.0.3 resolution: "@types/http-cache-semantics@npm:4.0.3" @@ -2685,6 +3007,38 @@ __metadata: languageName: node linkType: hard +"@types/http-errors@npm:*": + version: 2.0.4 + resolution: "@types/http-errors@npm:2.0.4" + checksum: 494670a57ad4062fee6c575047ad5782506dd35a6b9ed3894cea65830a94367bd84ba302eb3dde331871f6d70ca287bfedb1b2cf658e6132cd2cbd427ab56836 + languageName: node + linkType: hard + +"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.3": + version: 2.0.6 + resolution: "@types/istanbul-lib-coverage@npm:2.0.6" + checksum: 3948088654f3eeb45363f1db158354fb013b362dba2a5c2c18c559484d5eb9f6fd85b23d66c0a7c2fcfab7308d0a585b14dadaca6cc8bf89ebfdc7f8f5102fb7 + languageName: node + linkType: hard + +"@types/istanbul-lib-report@npm:*": + version: 3.0.3 + resolution: "@types/istanbul-lib-report@npm:3.0.3" + dependencies: + "@types/istanbul-lib-coverage": "npm:*" + checksum: 247e477bbc1a77248f3c6de5dadaae85ff86ac2d76c5fc6ab1776f54512a745ff2a5f791d22b942e3990ddbd40f3ef5289317c4fca5741bedfaa4f01df89051c + languageName: node + linkType: hard + +"@types/istanbul-reports@npm:^3.0.0": + version: 3.0.4 + resolution: "@types/istanbul-reports@npm:3.0.4" + dependencies: + "@types/istanbul-lib-report": "npm:*" + checksum: 1647fd402aced5b6edac87274af14ebd6b3a85447ef9ad11853a70fd92a98d35f81a5d3ea9fcb5dbb5834e800c6e35b64475e33fcae6bfa9acc70d61497c54ee + languageName: node + linkType: hard + "@types/json-schema@npm:^7.0.12": version: 7.0.14 resolution: "@types/json-schema@npm:7.0.14" @@ -2699,6 +3053,13 @@ __metadata: languageName: node linkType: hard +"@types/keygrip@npm:*": + version: 1.0.6 + resolution: "@types/keygrip@npm:1.0.6" + checksum: 1045a79913259f539ac1d04384ea8f61cf29f1d299040eb4b67d92304ec3bcea59b7e4b83cf95a73aa251ff62e55924e380d0c563a21fe8f6e91de20cc610386 + languageName: node + linkType: hard + "@types/keyv@npm:^3.1.4": version: 3.1.4 resolution: "@types/keyv@npm:3.1.4" @@ -2708,6 +3069,45 @@ __metadata: languageName: node linkType: hard +"@types/koa-compose@npm:*": + version: 3.2.8 + resolution: "@types/koa-compose@npm:3.2.8" + dependencies: + "@types/koa": "npm:*" + checksum: f2bfb7376c1e9075e8df7a46a5fce073159b01b94ec7dcca6e9f68627d48ea86a726bcfbd06491e1c99f68c0f27b8174b498081f9a3e4f976694452b5d0b5f01 + languageName: node + linkType: hard + +"@types/koa@npm:*, @types/koa@npm:^2.11.6": + version: 2.14.0 + resolution: "@types/koa@npm:2.14.0" + dependencies: + "@types/accepts": "npm:*" + "@types/content-disposition": "npm:*" + "@types/cookies": "npm:*" + "@types/http-assert": "npm:*" + "@types/http-errors": "npm:*" + "@types/keygrip": "npm:*" + "@types/koa-compose": "npm:*" + "@types/node": "npm:*" + checksum: 783536ea905244ec8edcda5f6063f34b3f4bfe16ff75f4d8faaa9b3ce58455ff140b20e63064a31491c1e7f34de4e869bce410fb116012887b9792c98591f744 + languageName: node + linkType: hard + +"@types/mime@npm:*": + version: 3.0.4 + resolution: "@types/mime@npm:3.0.4" + checksum: db478bc0f99e40f7b3e01d356a9bdf7817060808a294978111340317bcd80ca35382855578c5b60fbc84ae449674bd9bb38427b18417e1f8f19e4f72f8b242cd + languageName: node + linkType: hard + +"@types/mime@npm:^1": + version: 1.3.5 + resolution: "@types/mime@npm:1.3.5" + checksum: c2ee31cd9b993804df33a694d5aa3fa536511a49f2e06eeab0b484fef59b4483777dbb9e42a4198a0809ffbf698081fdbca1e5c2218b82b91603dfab10a10fbc + languageName: node + linkType: hard + "@types/node@npm:*": version: 20.8.8 resolution: "@types/node@npm:20.8.8" @@ -2724,6 +3124,13 @@ __metadata: languageName: node linkType: hard +"@types/parse5@npm:^6.0.1": + version: 6.0.3 + resolution: "@types/parse5@npm:6.0.3" + checksum: a7c7ef6625974b74b93c1105953003a2291897e453369efcadc569b907de2784d61d4e6905de3ef959fa07f3278f41ed0c22ead0173776023fc43b6ed31042d0 + languageName: node + linkType: hard + "@types/pbkdf2@npm:^3.0.0": version: 3.1.1 resolution: "@types/pbkdf2@npm:3.1.1" @@ -2733,6 +3140,20 @@ __metadata: languageName: node linkType: hard +"@types/qs@npm:*": + version: 6.9.11 + resolution: "@types/qs@npm:6.9.11" + checksum: 657a50f05b694d6fd3916d24177cfa0f3b8b87d9deff4ffa4dddcb0b03583ebf7c47b424b8de400270fb9a5cc1e9cf790dd82c833c6935305851e7da8ede3ff5 + languageName: node + linkType: hard + +"@types/range-parser@npm:*": + version: 1.2.7 + resolution: "@types/range-parser@npm:1.2.7" + checksum: 361bb3e964ec5133fa40644a0b942279ed5df1949f21321d77de79f48b728d39253e5ce0408c9c17e4e0fd95ca7899da36841686393b9f7a1e209916e9381a3c + languageName: node + linkType: hard + "@types/responselike@npm:^1.0.0": version: 1.0.2 resolution: "@types/responselike@npm:1.0.2" @@ -2758,6 +3179,27 @@ __metadata: languageName: node linkType: hard +"@types/send@npm:*": + version: 0.17.4 + resolution: "@types/send@npm:0.17.4" + dependencies: + "@types/mime": "npm:^1" + "@types/node": "npm:*" + checksum: 7f17fa696cb83be0a104b04b424fdedc7eaba1c9a34b06027239aba513b398a0e2b7279778af521f516a397ced417c96960e5f50fcfce40c4bc4509fb1a5883c + languageName: node + linkType: hard + +"@types/serve-static@npm:*": + version: 1.15.5 + resolution: "@types/serve-static@npm:1.15.5" + dependencies: + "@types/http-errors": "npm:*" + "@types/mime": "npm:*" + "@types/node": "npm:*" + checksum: 811d1a2f7e74a872195e7a013bcd87a2fb1edf07eaedcb9dcfd20c1eb4bc56ad4ea0d52141c13192c91ccda7c8aeb8a530d8a7e60b9c27f5990d7e62e0fecb03 + languageName: node + linkType: hard + "@types/trusted-types@npm:^2.0.2": version: 2.0.5 resolution: "@types/trusted-types@npm:2.0.5" @@ -2791,6 +3233,15 @@ __metadata: languageName: node linkType: hard +"@types/ws@npm:^7.4.0": + version: 7.4.7 + resolution: "@types/ws@npm:7.4.7" + dependencies: + "@types/node": "npm:*" + checksum: f1f53febd8623a85cef2652949acd19d83967e350ea15a851593e3033501750a1e04f418552e487db90a3d48611a1cff3ffcf139b94190c10f2fd1e1dc95ff10 + languageName: node + linkType: hard + "@typescript-eslint/eslint-plugin@npm:^6.4.0": version: 6.19.0 resolution: "@typescript-eslint/eslint-plugin@npm:6.19.0" @@ -2975,6 +3426,34 @@ __metadata: languageName: node linkType: hard +"@volar/language-core@npm:1.11.1, @volar/language-core@npm:~1.11.1": + version: 1.11.1 + resolution: "@volar/language-core@npm:1.11.1" + dependencies: + "@volar/source-map": "npm:1.11.1" + checksum: 92c4439e3a9ccc534c970031388c318740f6fa032283d03e136c6c8c0228f549c68a7c363af1a28252617a0dca6069e14028329ac906d5acf1912931d0cdcb69 + languageName: node + linkType: hard + +"@volar/source-map@npm:1.11.1, @volar/source-map@npm:~1.11.1": + version: 1.11.1 + resolution: "@volar/source-map@npm:1.11.1" + dependencies: + muggle-string: "npm:^0.3.1" + checksum: 0bfc639889802705f8036ea8b2052a95a4d691a68bc2b6744ba8b9d312d887393dd3278101180a5ee5304972899d493972a483afafd41e097968746c77d724cb + languageName: node + linkType: hard + +"@volar/typescript@npm:~1.11.1": + version: 1.11.1 + resolution: "@volar/typescript@npm:1.11.1" + dependencies: + "@volar/language-core": "npm:1.11.1" + path-browserify: "npm:^1.0.1" + checksum: 86fe153db3a14d8eb3632784a1d7fcbfbfb51fa5517c3878bfdd49ee8d15a83b1a09f9c589454b7396454c104d3a8e2db3a987dc99b37c33816772fc3e292bf2 + languageName: node + linkType: hard + "@vscode/web-custom-data@npm:^0.4.2": version: 0.4.8 resolution: "@vscode/web-custom-data@npm:0.4.8" @@ -2982,6 +3461,147 @@ __metadata: languageName: node linkType: hard +"@vue/compiler-core@npm:3.4.15": + version: 3.4.15 + resolution: "@vue/compiler-core@npm:3.4.15" + dependencies: + "@babel/parser": "npm:^7.23.6" + "@vue/shared": "npm:3.4.15" + entities: "npm:^4.5.0" + estree-walker: "npm:^2.0.2" + source-map-js: "npm:^1.0.2" + checksum: 151dd9c1a4fae826c53ec60536d14298266baf81f8ed1729b1cbcd082d06410234ee951336c5f43aeaf00febafc0fdd7f82934d747a052b7435be0c2e89b8f2e + languageName: node + linkType: hard + +"@vue/compiler-dom@npm:^3.3.0": + version: 3.4.15 + resolution: "@vue/compiler-dom@npm:3.4.15" + dependencies: + "@vue/compiler-core": "npm:3.4.15" + "@vue/shared": "npm:3.4.15" + checksum: d9339ca83f4e2e8fe21435c278e28b8551650d6ab09f0df1ba4afe983b4d692e07d753e70738dffee71e0d04af000eaafd7efebb8c4de5981b2e756ce03c3719 + languageName: node + linkType: hard + +"@vue/language-core@npm:1.8.27, @vue/language-core@npm:^1.8.26": + version: 1.8.27 + resolution: "@vue/language-core@npm:1.8.27" + dependencies: + "@volar/language-core": "npm:~1.11.1" + "@volar/source-map": "npm:~1.11.1" + "@vue/compiler-dom": "npm:^3.3.0" + "@vue/shared": "npm:^3.3.0" + computeds: "npm:^0.0.1" + minimatch: "npm:^9.0.3" + muggle-string: "npm:^0.3.1" + path-browserify: "npm:^1.0.1" + vue-template-compiler: "npm:^2.7.14" + peerDependencies: + typescript: "*" + peerDependenciesMeta: + typescript: + optional: true + checksum: 2018214d8ce2643d19e8e84eddaeacddca28b2980984d7916d97f97556c3716be184cf9f8c4f506d072a11f265401e3bc0391117cf7cfcc1e4a25048f4432dc7 + languageName: node + linkType: hard + +"@vue/shared@npm:3.4.15, @vue/shared@npm:^3.3.0": + version: 3.4.15 + resolution: "@vue/shared@npm:3.4.15" + checksum: eddcc1c82e8e550d9f3d622e33fd841c0c3b5c6f04f21f1cb10d3415068daabac0746279c88031861183d75d7a082fb599eec9201757d457de177d86989a9bc7 + languageName: node + linkType: hard + +"@web/browser-logs@npm:^0.4.0": + version: 0.4.0 + resolution: "@web/browser-logs@npm:0.4.0" + dependencies: + errorstacks: "npm:^2.2.0" + checksum: 5e03c29ddca52060194e9973d1752575f3d9af15168e28f6c6aac97c64c9aec07df843fc643c011ea2183b4987160e241b7cee9f404b3753053ea3a6dc1cfaa6 + languageName: node + linkType: hard + +"@web/dev-server-core@npm:^0.7.0": + version: 0.7.0 + resolution: "@web/dev-server-core@npm:0.7.0" + dependencies: + "@types/koa": "npm:^2.11.6" + "@types/ws": "npm:^7.4.0" + "@web/parse5-utils": "npm:^2.1.0" + chokidar: "npm:^3.4.3" + clone: "npm:^2.1.2" + es-module-lexer: "npm:^1.0.0" + get-stream: "npm:^6.0.0" + is-stream: "npm:^2.0.0" + isbinaryfile: "npm:^5.0.0" + koa: "npm:^2.13.0" + koa-etag: "npm:^4.0.0" + koa-send: "npm:^5.0.1" + koa-static: "npm:^5.0.0" + lru-cache: "npm:^8.0.4" + mime-types: "npm:^2.1.27" + parse5: "npm:^6.0.1" + picomatch: "npm:^2.2.2" + ws: "npm:^7.4.2" + checksum: a546b1ebb5d0691ff6d68acdbf828d2b1aa5e35cdeb290bcecfd5004567cfcf9ee60a85781ef3dfd2f72e6168f4152c431a9109deddb251f30eb946dfc650588 + languageName: node + linkType: hard + +"@web/parse5-utils@npm:^2.1.0": + version: 2.1.0 + resolution: "@web/parse5-utils@npm:2.1.0" + dependencies: + "@types/parse5": "npm:^6.0.1" + parse5: "npm:^6.0.1" + checksum: 9eedec69b38efd0d03640d55584e1ccc24de7818db077bd01420995014aa0bf994bd20616e4b728bc123eaca0c1572b629b29403da4c1a90c71dc91bada58667 + languageName: node + linkType: hard + +"@web/test-runner-commands@npm:^0.9.0": + version: 0.9.0 + resolution: "@web/test-runner-commands@npm:0.9.0" + dependencies: + "@web/test-runner-core": "npm:^0.13.0" + mkdirp: "npm:^1.0.4" + checksum: fa82dd1d5774228690127628d6a3edd485b55a991c80dfa957fd5825c61096a35045ed55fcf330989aee02aa43300ee534c50a02c1ef3ce3644a4e63efa821ce + languageName: node + linkType: hard + +"@web/test-runner-core@npm:^0.13.0": + version: 0.13.0 + resolution: "@web/test-runner-core@npm:0.13.0" + dependencies: + "@babel/code-frame": "npm:^7.12.11" + "@types/babel__code-frame": "npm:^7.0.2" + "@types/co-body": "npm:^6.1.0" + "@types/convert-source-map": "npm:^2.0.0" + "@types/debounce": "npm:^1.2.0" + "@types/istanbul-lib-coverage": "npm:^2.0.3" + "@types/istanbul-reports": "npm:^3.0.0" + "@web/browser-logs": "npm:^0.4.0" + "@web/dev-server-core": "npm:^0.7.0" + chokidar: "npm:^3.4.3" + cli-cursor: "npm:^3.1.0" + co-body: "npm:^6.1.0" + convert-source-map: "npm:^2.0.0" + debounce: "npm:^1.2.0" + dependency-graph: "npm:^0.11.0" + globby: "npm:^11.0.1" + ip: "npm:^1.1.5" + istanbul-lib-coverage: "npm:^3.0.0" + istanbul-lib-report: "npm:^3.0.1" + istanbul-reports: "npm:^3.0.2" + log-update: "npm:^4.0.0" + nanocolors: "npm:^0.2.1" + nanoid: "npm:^3.1.25" + open: "npm:^8.0.2" + picomatch: "npm:^2.2.2" + source-map: "npm:^0.7.3" + checksum: ec95b17c45ca28844835646fa542fb63b461cdc507cfcac1547d0e9ffa118f76874c6f9aa2b2dfb937a540b78b455491f14d1c6cf2512af6cafcd5fea710ef48 + languageName: node + linkType: hard + "abbrev@npm:^2.0.0": version: 2.0.0 resolution: "abbrev@npm:2.0.0" @@ -3014,7 +3634,7 @@ __metadata: languageName: node linkType: hard -"accepts@npm:~1.3.8": +"accepts@npm:^1.3.5, accepts@npm:~1.3.8": version: 1.3.8 resolution: "accepts@npm:1.3.8" dependencies: @@ -3084,7 +3704,7 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^6.12.3, ajv@npm:^6.12.4": +"ajv@npm:^6.12.3, ajv@npm:^6.12.4, ajv@npm:~6.12.6": version: 6.12.6 resolution: "ajv@npm:6.12.6" dependencies: @@ -3096,6 +3716,15 @@ __metadata: languageName: node linkType: hard +"ansi-escapes@npm:^4.3.0": + version: 4.3.2 + resolution: "ansi-escapes@npm:4.3.2" + dependencies: + type-fest: "npm:^0.21.3" + checksum: da917be01871525a3dfcf925ae2977bc59e8c513d4423368645634bf5d4ceba5401574eb705c1e92b79f7292af5a656f78c5725a4b0e1cec97c4b413705c1d50 + languageName: node + linkType: hard + "ansi-regex@npm:^5.0.1": version: 5.0.1 resolution: "ansi-regex@npm:5.0.1" @@ -3142,6 +3771,16 @@ __metadata: languageName: node linkType: hard +"anymatch@npm:~3.1.2": + version: 3.1.3 + resolution: "anymatch@npm:3.1.3" + dependencies: + normalize-path: "npm:^3.0.0" + picomatch: "npm:^2.0.4" + checksum: 57b06ae984bc32a0d22592c87384cd88fe4511b1dd7581497831c56d41939c8a001b28e7b853e1450f2bf61992dfcaa8ae2d0d161a0a90c4fb631ef07098fbac + languageName: node + linkType: hard + "argparse@npm:^2.0.1": version: 2.0.1 resolution: "argparse@npm:2.0.1" @@ -3149,6 +3788,15 @@ __metadata: languageName: node linkType: hard +"argparse@npm:~1.0.9": + version: 1.0.10 + resolution: "argparse@npm:1.0.10" + dependencies: + sprintf-js: "npm:~1.0.2" + checksum: b2972c5c23c63df66bca144dbc65d180efa74f25f8fd9b7d9a0a6c88ae839db32df3d54770dcb6460cf840d232b60695d1a6b1053f599d84e73f7437087712de + languageName: node + linkType: hard + "array-buffer-byte-length@npm:^1.0.0": version: 1.0.0 resolution: "array-buffer-byte-length@npm:1.0.0" @@ -3261,6 +3909,13 @@ __metadata: languageName: node linkType: hard +"astral-regex@npm:^2.0.0": + version: 2.0.0 + resolution: "astral-regex@npm:2.0.0" + checksum: f63d439cc383db1b9c5c6080d1e240bd14dae745f15d11ec5da863e182bbeca70df6c8191cffef5deba0b566ef98834610a68be79ac6379c95eeb26e1b310e25 + languageName: node + linkType: hard + "async-eventemitter@npm:^0.2.2": version: 0.2.4 resolution: "async-eventemitter@npm:0.2.4" @@ -3455,6 +4110,13 @@ __metadata: languageName: node linkType: hard +"binary-extensions@npm:^2.0.0": + version: 2.2.0 + resolution: "binary-extensions@npm:2.2.0" + checksum: d73d8b897238a2d3ffa5f59c0241870043aa7471335e89ea5e1ff48edb7c2d0bb471517a3e4c5c3f4c043615caa2717b5f80a5e61e07503d51dc85cb848e665d + languageName: node + linkType: hard + "blakejs@npm:^1.1.0": version: 1.2.1 resolution: "blakejs@npm:1.2.1" @@ -3558,7 +4220,7 @@ __metadata: languageName: node linkType: hard -"braces@npm:^3.0.2": +"braces@npm:^3.0.2, braces@npm:~3.0.2": version: 3.0.2 resolution: "braces@npm:3.0.2" dependencies: @@ -3708,6 +4370,16 @@ __metadata: languageName: node linkType: hard +"cache-content-type@npm:^1.0.0": + version: 1.0.1 + resolution: "cache-content-type@npm:1.0.1" + dependencies: + mime-types: "npm:^2.1.18" + ylru: "npm:^1.2.0" + checksum: 59b50e29e64a24bb52a16e5d35b69ad27ef14313701acc5e462b0aeebf2f09ff87fb6538eb0c0f0de4de05c8a1eecaef47f455f5b4928079e68f607f816a0843 + languageName: node + linkType: hard + "cacheable-lookup@npm:^5.0.3": version: 5.0.4 resolution: "cacheable-lookup@npm:5.0.4" @@ -3823,6 +4495,25 @@ __metadata: languageName: node linkType: hard +"chokidar@npm:^3.4.3": + version: 3.5.3 + resolution: "chokidar@npm:3.5.3" + dependencies: + anymatch: "npm:~3.1.2" + braces: "npm:~3.0.2" + fsevents: "npm:~2.3.2" + glob-parent: "npm:~5.1.2" + is-binary-path: "npm:~2.1.0" + is-glob: "npm:~4.0.1" + normalize-path: "npm:~3.0.0" + readdirp: "npm:~3.6.0" + dependenciesMeta: + fsevents: + optional: true + checksum: 1076953093e0707c882a92c66c0f56ba6187831aa51bb4de878c1fec59ae611a3bf02898f190efec8e77a086b8df61c2b2a3ea324642a0558bdf8ee6c5dc9ca1 + languageName: node + linkType: hard + "chownr@npm:^1.1.4": version: 1.1.4 resolution: "chownr@npm:1.1.4" @@ -3874,6 +4565,15 @@ __metadata: languageName: node linkType: hard +"cli-cursor@npm:^3.1.0": + version: 3.1.0 + resolution: "cli-cursor@npm:3.1.0" + dependencies: + restore-cursor: "npm:^3.1.0" + checksum: 92a2f98ff9037d09be3dfe1f0d749664797fb674bf388375a2207a1203b69d41847abf16434203e0089212479e47a358b13a0222ab9fccfe8e2644a7ccebd111 + languageName: node + linkType: hard + "cliui@npm:^8.0.1": version: 8.0.1 resolution: "cliui@npm:8.0.1" @@ -3894,13 +4594,32 @@ __metadata: languageName: node linkType: hard -"clone@npm:^2.0.0, clone@npm:^2.1.1": +"clone@npm:^2.0.0, clone@npm:^2.1.1, clone@npm:^2.1.2": version: 2.1.2 resolution: "clone@npm:2.1.2" checksum: ed0601cd0b1606bc7d82ee7175b97e68d1dd9b91fd1250a3617b38d34a095f8ee0431d40a1a611122dcccb4f93295b4fdb94942aa763392b5fe44effa50c2d5e languageName: node linkType: hard +"co-body@npm:^6.1.0": + version: 6.1.0 + resolution: "co-body@npm:6.1.0" + dependencies: + inflation: "npm:^2.0.0" + qs: "npm:^6.5.2" + raw-body: "npm:^2.3.3" + type-is: "npm:^1.6.16" + checksum: 54f5aa6e8dcc2961259a6e120807430d3ebe3d3f683e0e5b2747f547d142dfa045b7a0becbc46d13f0cb87b52e99b011090203b447cefc8587e4df1932aa9e2a + languageName: node + linkType: hard + +"co@npm:^4.6.0": + version: 4.6.0 + resolution: "co@npm:4.6.0" + checksum: c0e85ea0ca8bf0a50cbdca82efc5af0301240ca88ebe3644a6ffb8ffe911f34d40f8fbcf8f1d52c5ddd66706abd4d3bfcd64259f1e8e2371d4f47573b0dc8c28 + languageName: node + linkType: hard + "color-convert@npm:^1.9.0": version: 1.9.3 resolution: "color-convert@npm:1.9.3" @@ -3933,6 +4652,13 @@ __metadata: languageName: node linkType: hard +"colors@npm:~1.2.1": + version: 1.2.5 + resolution: "colors@npm:1.2.5" + checksum: f4acebf2d2da9b4f8afb770361d14c01034bcb43add4cae493e7d186dcd7e0c5e2b440520fbfdf636e872606a0eb86b1f69fcf2f087df2876a4e222612539ee0 + languageName: node + linkType: hard + "combined-stream@npm:^1.0.6, combined-stream@npm:^1.0.8, combined-stream@npm:~1.0.6": version: 1.0.8 resolution: "combined-stream@npm:1.0.8" @@ -3942,6 +4668,20 @@ __metadata: languageName: node linkType: hard +"commander@npm:^9.4.1": + version: 9.5.0 + resolution: "commander@npm:9.5.0" + checksum: 5f7784fbda2aaec39e89eb46f06a999e00224b3763dc65976e05929ec486e174fe9aac2655f03ba6a5e83875bd173be5283dc19309b7c65954701c02025b3c1d + languageName: node + linkType: hard + +"computeds@npm:^0.0.1": + version: 0.0.1 + resolution: "computeds@npm:0.0.1" + checksum: 8a8736f1f43e4a99286519785d71a10ece8f444a2fa1fc2fe1f03dedf63f3477b45094002c85a2826f7631759c9f5a00b4ace47456997f253073fc525e8983de + languageName: node + linkType: hard + "concat-map@npm:0.0.1": version: 0.0.1 resolution: "concat-map@npm:0.0.1" @@ -3949,7 +4689,7 @@ __metadata: languageName: node linkType: hard -"content-disposition@npm:0.5.4": +"content-disposition@npm:0.5.4, content-disposition@npm:~0.5.2": version: 0.5.4 resolution: "content-disposition@npm:0.5.4" dependencies: @@ -3969,13 +4709,20 @@ __metadata: languageName: node linkType: hard -"content-type@npm:~1.0.4, content-type@npm:~1.0.5": +"content-type@npm:^1.0.4, content-type@npm:~1.0.4, content-type@npm:~1.0.5": version: 1.0.5 resolution: "content-type@npm:1.0.5" checksum: b76ebed15c000aee4678c3707e0860cb6abd4e680a598c0a26e17f0bfae723ec9cc2802f0ff1bc6e4d80603719010431d2231018373d4dde10f9ccff9dadf5af languageName: node linkType: hard +"convert-source-map@npm:^2.0.0": + version: 2.0.0 + resolution: "convert-source-map@npm:2.0.0" + checksum: 8f2f7a27a1a011cc6cc88cc4da2d7d0cfa5ee0369508baae3d98c260bb3ac520691464e5bbe4ae7cdf09860c1d69ecc6f70c63c6e7c7f7e3f18ec08484dc7d9b + languageName: node + linkType: hard + "cookie-signature@npm:1.0.6": version: 1.0.6 resolution: "cookie-signature@npm:1.0.6" @@ -3990,6 +4737,16 @@ __metadata: languageName: node linkType: hard +"cookies@npm:~0.9.0": + version: 0.9.1 + resolution: "cookies@npm:0.9.1" + dependencies: + depd: "npm:~2.0.0" + keygrip: "npm:~1.1.0" + checksum: 3ffa1c0e992b62ee119adae4dd2ddd4a89166fa5434cd9bd9ff84ec4d2f14dfe2318a601280abfe32a4f64f884ec9345fb1912e488b002d188d2efa0d3919ba3 + languageName: node + linkType: hard + "core-js-compat@npm:^3.33.1": version: 3.33.1 resolution: "core-js-compat@npm:3.33.1" @@ -4144,6 +4901,20 @@ __metadata: languageName: node linkType: hard +"de-indent@npm:^1.0.2": + version: 1.0.2 + resolution: "de-indent@npm:1.0.2" + checksum: 7058ce58abd6dfc123dd204e36be3797abd419b59482a634605420f47ae97639d0c183ec5d1b904f308a01033f473673897afc2bd59bc620ebf1658763ef4291 + languageName: node + linkType: hard + +"debounce@npm:^1.2.0": + version: 1.2.1 + resolution: "debounce@npm:1.2.1" + checksum: 6c9320aa0973fc42050814621a7a8a78146c1975799b5b3cc1becf1f77ba9a5aa583987884230da0842a03f385def452fad5d60db97c3d1c8b824e38a8edf500 + languageName: node + linkType: hard + "debug@npm:2.6.9, debug@npm:^2.2.0": version: 2.6.9 resolution: "debug@npm:2.6.9" @@ -4165,7 +4936,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:^3.2.7": +"debug@npm:^3.1.0, debug@npm:^3.2.7": version: 3.2.7 resolution: "debug@npm:3.2.7" dependencies: @@ -4215,6 +4986,13 @@ __metadata: languageName: node linkType: hard +"deep-equal@npm:~1.0.1": + version: 1.0.1 + resolution: "deep-equal@npm:1.0.1" + checksum: bef838ef9824e124d10335deb9c7540bfc9f2f0eab17ad1bb870d0eee83ee4e7e6f6f892e5eebc2bd82759a76676926ad5246180097e28e57752176ff7dae888 + languageName: node + linkType: hard + "deep-is@npm:^0.1.3": version: 0.1.4 resolution: "deep-is@npm:0.1.4" @@ -4303,14 +5081,35 @@ __metadata: languageName: node linkType: hard -"depd@npm:2.0.0": +"delegates@npm:^1.0.0": + version: 1.0.0 + resolution: "delegates@npm:1.0.0" + checksum: ba05874b91148e1db4bf254750c042bf2215febd23a6d3cda2e64896aef79745fbd4b9996488bd3cafb39ce19dbce0fd6e3b6665275638befffe1c9b312b91b5 + languageName: node + linkType: hard + +"depd@npm:2.0.0, depd@npm:^2.0.0, depd@npm:~2.0.0": version: 2.0.0 resolution: "depd@npm:2.0.0" checksum: 58bd06ec20e19529b06f7ad07ddab60e504d9e0faca4bd23079fac2d279c3594334d736508dc350e06e510aba5e22e4594483b3a6562ce7c17dd797f4cc4ad2c languageName: node linkType: hard -"destroy@npm:1.2.0": +"depd@npm:~1.1.2": + version: 1.1.2 + resolution: "depd@npm:1.1.2" + checksum: acb24aaf936ef9a227b6be6d495f0d2eb20108a9a6ad40585c5bda1a897031512fef6484e4fdbb80bd249fdaa82841fa1039f416ece03188e677ba11bcfda249 + languageName: node + linkType: hard + +"dependency-graph@npm:^0.11.0": + version: 0.11.0 + resolution: "dependency-graph@npm:0.11.0" + checksum: 9e6968d1534fdb502f7f3a25a3819b499f9d60f8389193950ed0b4d1618f1341b36b5d039f2cee256cfe10c9e8198ace16b271e370df06a93fac206e81602e7c + languageName: node + linkType: hard + +"destroy@npm:1.2.0, destroy@npm:^1.0.4": version: 1.2.0 resolution: "destroy@npm:1.2.0" checksum: bd7633942f57418f5a3b80d5cb53898127bcf53e24cdf5d5f4396be471417671f0fee48a4ebe9a1e9defbde2a31280011af58a57e090ff822f589b443ed4e643 @@ -4429,7 +5228,7 @@ __metadata: languageName: node linkType: hard -"encodeurl@npm:~1.0.2": +"encodeurl@npm:^1.0.2, encodeurl@npm:~1.0.2": version: 1.0.2 resolution: "encodeurl@npm:1.0.2" checksum: f6c2387379a9e7c1156c1c3d4f9cb7bb11cf16dd4c1682e1f6746512564b053df5781029b6061296832b59fb22f459dbe250386d217c2f6e203601abb2ee0bec @@ -4454,7 +5253,7 @@ __metadata: languageName: node linkType: hard -"entities@npm:^4.4.0": +"entities@npm:^4.4.0, entities@npm:^4.5.0": version: 4.5.0 resolution: "entities@npm:4.5.0" checksum: 5b039739f7621f5d1ad996715e53d964035f75ad3b9a4d38c6b3804bb226e282ffeae2443624d8fdd9c47d8e926ae9ac009c54671243f0c3294c26af7cc85250 @@ -4486,6 +5285,13 @@ __metadata: languageName: node linkType: hard +"errorstacks@npm:^2.2.0": + version: 2.4.1 + resolution: "errorstacks@npm:2.4.1" + checksum: 5721d0fcc2f4b2f3bcedb71a767d19ea2dc04c7598ffcc547d5ad61187a36133b6b833922aadd449ebb12d7d1e68706eab0b9d1218409034e39bff48d8642df3 + languageName: node + linkType: hard + "es-abstract@npm:^1.22.1": version: 1.22.3 resolution: "es-abstract@npm:1.22.3" @@ -4533,6 +5339,13 @@ __metadata: languageName: node linkType: hard +"es-module-lexer@npm:^1.0.0": + version: 1.4.1 + resolution: "es-module-lexer@npm:1.4.1" + checksum: b7260a138668554d3f0ddcc728cb4b60c2fa463f15545cf155ecbdd5450a1348952d58298a7f48642e900ee579f21d7f5304b6b3c61b3d9fc2d4b2109b5a9dff + languageName: node + linkType: hard + "es-set-tostringtag@npm:^2.0.1": version: 2.0.2 resolution: "es-set-tostringtag@npm:2.0.2" @@ -4981,7 +5794,7 @@ __metadata: languageName: node linkType: hard -"escape-html@npm:~1.0.3": +"escape-html@npm:^1.0.3, escape-html@npm:~1.0.3": version: 1.0.3 resolution: "escape-html@npm:1.0.3" checksum: 524c739d776b36c3d29fa08a22e03e8824e3b2fd57500e5e44ecf3cc4707c34c60f9ca0781c0e33d191f2991161504c295e98f68c78fe7baa6e57081ec6ac0a3 @@ -5247,7 +6060,7 @@ __metadata: languageName: node linkType: hard -"estree-walker@npm:^2.0.1": +"estree-walker@npm:^2.0.1, estree-walker@npm:^2.0.2": version: 2.0.2 resolution: "estree-walker@npm:2.0.2" checksum: 53a6c54e2019b8c914dc395890153ffdc2322781acf4bd7d1a32d7aedc1710807bdcd866ac133903d5629ec601fbb50abe8c2e5553c7f5a0afdd9b6af6c945af @@ -5270,7 +6083,7 @@ __metadata: languageName: node linkType: hard -"etag@npm:~1.8.1": +"etag@npm:^1.8.1, etag@npm:~1.8.1": version: 1.8.1 resolution: "etag@npm:1.8.1" checksum: 12be11ef62fb9817314d790089a0a49fae4e1b50594135dcb8076312b7d7e470884b5100d249b28c18581b7fd52f8b485689ffae22a11ed9ec17377a33a08f84 @@ -6113,7 +6926,7 @@ __metadata: languageName: node linkType: hard -"fresh@npm:0.5.2": +"fresh@npm:0.5.2, fresh@npm:~0.5.2": version: 0.5.2 resolution: "fresh@npm:0.5.2" checksum: c6d27f3ed86cc5b601404822f31c900dd165ba63fff8152a3ef714e2012e7535027063bc67ded4cb5b3a49fa596495d46cacd9f47d6328459cf570f08b7d9e5a @@ -6131,6 +6944,17 @@ __metadata: languageName: node linkType: hard +"fs-extra@npm:~7.0.1": + version: 7.0.1 + resolution: "fs-extra@npm:7.0.1" + dependencies: + graceful-fs: "npm:^4.1.2" + jsonfile: "npm:^4.0.0" + universalify: "npm:^0.1.0" + checksum: 1943bb2150007e3739921b8d13d4109abdc3cc481e53b97b7ea7f77eda1c3c642e27ae49eac3af074e3496ea02fde30f411ef410c760c70a38b92e656e5da784 + languageName: node + linkType: hard + "fs-minipass@npm:^1.2.7": version: 1.2.7 resolution: "fs-minipass@npm:1.2.7" @@ -6285,7 +7109,7 @@ __metadata: languageName: node linkType: hard -"glob-parent@npm:^5.1.2": +"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": version: 5.1.2 resolution: "glob-parent@npm:5.1.2" dependencies: @@ -6360,7 +7184,7 @@ __metadata: languageName: node linkType: hard -"globby@npm:^11.1.0": +"globby@npm:^11.0.1, globby@npm:^11.1.0": version: 11.1.0 resolution: "globby@npm:11.1.0" dependencies: @@ -6537,6 +7361,15 @@ __metadata: languageName: node linkType: hard +"he@npm:^1.2.0": + version: 1.2.0 + resolution: "he@npm:1.2.0" + bin: + he: bin/he + checksum: a27d478befe3c8192f006cdd0639a66798979dfa6e2125c6ac582a19a5ebfec62ad83e8382e6036170d873f46e4536a7e795bf8b95bf7c247f4cc0825ccc8c17 + languageName: node + linkType: hard + "hmac-drbg@npm:^1.0.1": version: 1.0.1 resolution: "hmac-drbg@npm:1.0.1" @@ -6557,6 +7390,23 @@ __metadata: languageName: node linkType: hard +"html-escaper@npm:^2.0.0": + version: 2.0.2 + resolution: "html-escaper@npm:2.0.2" + checksum: 208e8a12de1a6569edbb14544f4567e6ce8ecc30b9394fcaa4e7bb1e60c12a7c9a1ed27e31290817157e8626f3a4f29e76c8747030822eb84a6abb15c255f0a0 + languageName: node + linkType: hard + +"http-assert@npm:^1.3.0": + version: 1.5.0 + resolution: "http-assert@npm:1.5.0" + dependencies: + deep-equal: "npm:~1.0.1" + http-errors: "npm:~1.8.0" + checksum: 7b4e631114a1a77654f9ba3feb96da305ddbdeb42112fe384b7b3249c7141e460d7177970155bea6e54e655a04850415b744b452c1fe5052eba6f4186d16b095 + languageName: node + linkType: hard + "http-cache-semantics@npm:^4.0.0, http-cache-semantics@npm:^4.1.1": version: 4.1.1 resolution: "http-cache-semantics@npm:4.1.1" @@ -6577,6 +7427,31 @@ __metadata: languageName: node linkType: hard +"http-errors@npm:^1.6.3, http-errors@npm:^1.7.3, http-errors@npm:~1.8.0": + version: 1.8.1 + resolution: "http-errors@npm:1.8.1" + dependencies: + depd: "npm:~1.1.2" + inherits: "npm:2.0.4" + setprototypeof: "npm:1.2.0" + statuses: "npm:>= 1.5.0 < 2" + toidentifier: "npm:1.0.1" + checksum: f01aeecd76260a6fe7f08e192fcbe9b2f39ed20fc717b852669a69930167053b01790998275c6297d44f435cf0e30edd50c05223d1bec9bc484e6cf35b2d6f43 + languageName: node + linkType: hard + +"http-errors@npm:~1.6.2": + version: 1.6.3 + resolution: "http-errors@npm:1.6.3" + dependencies: + depd: "npm:~1.1.2" + inherits: "npm:2.0.3" + setprototypeof: "npm:1.1.0" + statuses: "npm:>= 1.4.0 < 2" + checksum: 17ec4046ee974477778bfdd525936c254b872054703ec2caa4d6f099566b8adade636ae6aeeacb39302c5cd6e28fb407ebd937f500f5010d0b6850750414ff78 + languageName: node + linkType: hard + "http-https@npm:^1.0.0": version: 1.0.0 resolution: "http-https@npm:1.0.0" @@ -6721,6 +7596,13 @@ __metadata: languageName: node linkType: hard +"import-lazy@npm:~4.0.0": + version: 4.0.0 + resolution: "import-lazy@npm:4.0.0" + checksum: a3520313e2c31f25c0b06aa66d167f329832b68a4f957d7c9daf6e0fa41822b6e84948191648b9b9d8ca82f94740cdf15eecf2401a5b42cd1c33fd84f2225cca + languageName: node + linkType: hard + "imurmurhash@npm:^0.1.4": version: 0.1.4 resolution: "imurmurhash@npm:0.1.4" @@ -6735,6 +7617,13 @@ __metadata: languageName: node linkType: hard +"inflation@npm:^2.0.0": + version: 2.1.0 + resolution: "inflation@npm:2.1.0" + checksum: aadfcb8047a7e00d644e2e195f901dd9d7266c2be2326b7f8f6a99298f14916f1e322d00108a7e2778d6e76a8dc2174ddb9ac14bcdfe4f4866dfd612b695ab5d + languageName: node + linkType: hard + "inflight@npm:^1.0.4": version: 1.0.6 resolution: "inflight@npm:1.0.6" @@ -6752,6 +7641,13 @@ __metadata: languageName: node linkType: hard +"inherits@npm:2.0.3": + version: 2.0.3 + resolution: "inherits@npm:2.0.3" + checksum: 6e56402373149ea076a434072671f9982f5fad030c7662be0332122fe6c0fa490acb3cc1010d90b6eff8d640b1167d77674add52dfd1bb85d545cf29e80e73e7 + languageName: node + linkType: hard + "internal-slot@npm:^1.0.5": version: 1.0.6 resolution: "internal-slot@npm:1.0.6" @@ -6763,6 +7659,13 @@ __metadata: languageName: node linkType: hard +"ip@npm:^1.1.5": + version: 1.1.8 + resolution: "ip@npm:1.1.8" + checksum: ab32a5ecfa678d4c158c1381c4c6744fce89a1d793e1b6635ba79d0753c069030b672d765887b6fff55670c711dfa47475895e5d6013efbbcf04687c51cb8db9 + languageName: node + linkType: hard + "ip@npm:^2.0.0": version: 2.0.0 resolution: "ip@npm:2.0.0" @@ -6807,6 +7710,15 @@ __metadata: languageName: node linkType: hard +"is-binary-path@npm:~2.1.0": + version: 2.1.0 + resolution: "is-binary-path@npm:2.1.0" + dependencies: + binary-extensions: "npm:^2.0.0" + checksum: a16eaee59ae2b315ba36fad5c5dcaf8e49c3e27318f8ab8fa3cdb8772bf559c8d1ba750a589c2ccb096113bb64497084361a25960899cb6172a6925ab6123d38 + languageName: node + linkType: hard + "is-boolean-object@npm:^1.1.0": version: 1.1.2 resolution: "is-boolean-object@npm:1.1.2" @@ -6824,7 +7736,7 @@ __metadata: languageName: node linkType: hard -"is-core-module@npm:^2.13.0, is-core-module@npm:^2.13.1": +"is-core-module@npm:^2.1.0, is-core-module@npm:^2.13.0, is-core-module@npm:^2.13.1": version: 2.13.1 resolution: "is-core-module@npm:2.13.1" dependencies: @@ -6897,7 +7809,7 @@ __metadata: languageName: node linkType: hard -"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3": +"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": version: 4.0.3 resolution: "is-glob@npm:4.0.3" dependencies: @@ -7074,6 +7986,13 @@ __metadata: languageName: node linkType: hard +"isbinaryfile@npm:^5.0.0": + version: 5.0.0 + resolution: "isbinaryfile@npm:5.0.0" + checksum: f8d4d863ae857eb07538cd1a81ba8c0a86ba8773e46c05a19a84d7dd10673551dd5b4c24ff3444b658cb1267df54f388a4beea54f416d69a1c9ef7addedd4cf9 + languageName: node + linkType: hard + "isexe@npm:^2.0.0": version: 2.0.0 resolution: "isexe@npm:2.0.0" @@ -7095,6 +8014,34 @@ __metadata: languageName: node linkType: hard +"istanbul-lib-coverage@npm:^3.0.0": + version: 3.2.2 + resolution: "istanbul-lib-coverage@npm:3.2.2" + checksum: 6c7ff2106769e5f592ded1fb418f9f73b4411fd5a084387a5410538332b6567cd1763ff6b6cadca9b9eb2c443cce2f7ea7d7f1b8d315f9ce58539793b1e0922b + languageName: node + linkType: hard + +"istanbul-lib-report@npm:^3.0.0, istanbul-lib-report@npm:^3.0.1": + version: 3.0.1 + resolution: "istanbul-lib-report@npm:3.0.1" + dependencies: + istanbul-lib-coverage: "npm:^3.0.0" + make-dir: "npm:^4.0.0" + supports-color: "npm:^7.1.0" + checksum: 84323afb14392de8b6a5714bd7e9af845cfbd56cfe71ed276cda2f5f1201aea673c7111901227ee33e68e4364e288d73861eb2ed48f6679d1e69a43b6d9b3ba7 + languageName: node + linkType: hard + +"istanbul-reports@npm:^3.0.2": + version: 3.1.6 + resolution: "istanbul-reports@npm:3.1.6" + dependencies: + html-escaper: "npm:^2.0.0" + istanbul-lib-report: "npm:^3.0.0" + checksum: ec3f1bdbc51b3e0b325a5b9f4ad31a247697f31001df4e81075f7980413f14da1b5adfec574fd156efd3b0464023f61320f6718efc66ee72b32d89611cef99dd + languageName: node + linkType: hard + "jackspeak@npm:^2.3.5": version: 2.3.6 resolution: "jackspeak@npm:2.3.6" @@ -7108,6 +8055,13 @@ __metadata: languageName: node linkType: hard +"jju@npm:~1.4.0": + version: 1.4.0 + resolution: "jju@npm:1.4.0" + checksum: f3f444557e4364cfc06b1abf8331bf3778b26c0c8552ca54429bc0092652172fdea26cbffe33e1017b303d5aa506f7ede8571857400efe459cb7439180e2acad + languageName: node + linkType: hard + "js-sha3@npm:0.8.0, js-sha3@npm:^0.8.0": version: 0.8.0 resolution: "js-sha3@npm:0.8.0" @@ -7122,6 +8076,13 @@ __metadata: languageName: node linkType: hard +"js-tokens@npm:^4.0.0": + version: 4.0.0 + resolution: "js-tokens@npm:4.0.0" + checksum: e248708d377aa058eacf2037b07ded847790e6de892bbad3dac0abba2e759cb9f121b00099a65195616badcb6eca8d14d975cb3e89eb1cfda644756402c8aeed + languageName: node + linkType: hard + "js-yaml@npm:^4.1.0": version: 4.1.0 resolution: "js-yaml@npm:4.1.0" @@ -7318,6 +8279,15 @@ __metadata: languageName: node linkType: hard +"keygrip@npm:~1.1.0": + version: 1.1.0 + resolution: "keygrip@npm:1.1.0" + dependencies: + tsscmp: "npm:1.0.6" + checksum: 2aceec1a1e642a0caf938044056ed67b1909cfe67a93a59b32aae2863e0f35a1a53782ecc8f9cd0e3bdb60863fa0f401ccbd257cd7dfae61915f78445139edea + languageName: node + linkType: hard + "keyv@npm:^4.0.0, keyv@npm:^4.5.3": version: 4.5.4 resolution: "keyv@npm:4.5.4" @@ -7327,6 +8297,91 @@ __metadata: languageName: node linkType: hard +"koa-compose@npm:^4.1.0": + version: 4.1.0 + resolution: "koa-compose@npm:4.1.0" + checksum: f1f786f994a691931148e7f38f443865bf2702af4a61610d1eea04dab79c04b1232285b59d82a0cf61c830516dd92f10ab0d009b024fcecd4098e7d296ab771a + languageName: node + linkType: hard + +"koa-convert@npm:^2.0.0": + version: 2.0.0 + resolution: "koa-convert@npm:2.0.0" + dependencies: + co: "npm:^4.6.0" + koa-compose: "npm:^4.1.0" + checksum: d3e243ceccd11524d5f4942f6ccd828a9b18a1a967c4375192aa9eedf844f790563632839f006732ce8ca720275737c65a3bab344e13b25f41fb2be451ea102c + languageName: node + linkType: hard + +"koa-etag@npm:^4.0.0": + version: 4.0.0 + resolution: "koa-etag@npm:4.0.0" + dependencies: + etag: "npm:^1.8.1" + checksum: 97515858353b3c64837b5e76d0c733623d29b9abace777eea33b124a4d6b0639ab198723bc93160d76a5cc91d59395b9914614d53719c5a7699fd5e19b015ec1 + languageName: node + linkType: hard + +"koa-send@npm:^5.0.0, koa-send@npm:^5.0.1": + version: 5.0.1 + resolution: "koa-send@npm:5.0.1" + dependencies: + debug: "npm:^4.1.1" + http-errors: "npm:^1.7.3" + resolve-path: "npm:^1.4.0" + checksum: 787a8abaf3690a86cf2e6021f1d870daba5f8393f4b4da4da74c26e7d1f7a89636fa2f251a0ec1ea75364fc81a9ef20d3c52e8e2dc7ad9f1d5053357a0db204f + languageName: node + linkType: hard + +"koa-static@npm:^5.0.0": + version: 5.0.0 + resolution: "koa-static@npm:5.0.0" + dependencies: + debug: "npm:^3.1.0" + koa-send: "npm:^5.0.0" + checksum: 4cb7a4e98506d54274658eb3565b24fcbe606bbb6916cb5ef226b2613d3ffd417dec3404000baa171f2206f2a6d29117bbe881fd26b27d54ef746d9de6de3e91 + languageName: node + linkType: hard + +"koa@npm:^2.13.0": + version: 2.15.0 + resolution: "koa@npm:2.15.0" + dependencies: + accepts: "npm:^1.3.5" + cache-content-type: "npm:^1.0.0" + content-disposition: "npm:~0.5.2" + content-type: "npm:^1.0.4" + cookies: "npm:~0.9.0" + debug: "npm:^4.3.2" + delegates: "npm:^1.0.0" + depd: "npm:^2.0.0" + destroy: "npm:^1.0.4" + encodeurl: "npm:^1.0.2" + escape-html: "npm:^1.0.3" + fresh: "npm:~0.5.2" + http-assert: "npm:^1.3.0" + http-errors: "npm:^1.6.3" + is-generator-function: "npm:^1.0.7" + koa-compose: "npm:^4.1.0" + koa-convert: "npm:^2.0.0" + on-finished: "npm:^2.3.0" + only: "npm:~0.0.2" + parseurl: "npm:^1.3.2" + statuses: "npm:^1.5.0" + type-is: "npm:^1.6.16" + vary: "npm:^1.1.2" + checksum: 018daa5d3521621699e4228de9191849083c0356e1e4abda6d96aa44fa3ee1f6a67849040c2a0b681697d1431a8232cca1e532a7246fc785257bfdf1e6ccf43a + languageName: node + linkType: hard + +"kolorist@npm:^1.8.0": + version: 1.8.0 + resolution: "kolorist@npm:1.8.0" + checksum: 73075db44a692bf6c34a649f3b4b3aea4993b84f6b754cbf7a8577e7c7db44c0bad87752bd23b0ce533f49de2244ce2ce03b7b1b667a85ae170a94782cc50f9b + languageName: node + linkType: hard + "level-codec@npm:~7.0.0": version: 7.0.1 resolution: "level-codec@npm:7.0.1" @@ -7436,6 +8491,15 @@ __metadata: languageName: node linkType: hard +"lit-html@npm:^2.0.0 || ^3.0.0, lit-html@npm:^3.1.0": + version: 3.1.1 + resolution: "lit-html@npm:3.1.1" + dependencies: + "@types/trusted-types": "npm:^2.0.2" + checksum: c4f12b0b49739b1dd83e172b20e5b8f2ad5b92a72c25aa19e3cc169823164b7aeb12fb098ef6ab1031e6ed15b4119659190832e0b066df785d903bebe6734b87 + languageName: node + linkType: hard + "lit-html@npm:^3.0.0": version: 3.0.0 resolution: "lit-html@npm:3.0.0" @@ -7456,6 +8520,17 @@ __metadata: languageName: node linkType: hard +"lit@npm:^2.0.0 || ^3.0.0, lit@npm:^3.0.0": + version: 3.1.1 + resolution: "lit@npm:3.1.1" + dependencies: + "@lit/reactive-element": "npm:^2.0.0" + lit-element: "npm:^4.0.0" + lit-html: "npm:^3.1.0" + checksum: fea579d9e7e27bf984a9dfe2b617e4c21d3bd428a38de63719797b266b1548cc3a89155bbb630f46edf337641d9d02106f749b6ca4a439daba47a1e1045937b7 + languageName: node + linkType: hard + "local-pkg@npm:^0.5.0": version: 0.5.0 resolution: "local-pkg@npm:0.5.0" @@ -7489,6 +8564,20 @@ __metadata: languageName: node linkType: hard +"lodash.get@npm:^4.4.2": + version: 4.4.2 + resolution: "lodash.get@npm:4.4.2" + checksum: 48f40d471a1654397ed41685495acb31498d5ed696185ac8973daef424a749ca0c7871bf7b665d5c14f5cc479394479e0307e781f61d5573831769593411be6e + languageName: node + linkType: hard + +"lodash.isequal@npm:^4.5.0": + version: 4.5.0 + resolution: "lodash.isequal@npm:4.5.0" + checksum: dfdb2356db19631a4b445d5f37868a095e2402292d59539a987f134a8778c62a2810c2452d11ae9e6dcac71fc9de40a6fedcb20e2952a15b431ad8b29e50e28f + languageName: node + linkType: hard + "lodash.merge@npm:^4.6.2": version: 4.6.2 resolution: "lodash.merge@npm:4.6.2" @@ -7496,13 +8585,25 @@ __metadata: languageName: node linkType: hard -"lodash@npm:^4.17.14": +"lodash@npm:^4.17.14, lodash@npm:~4.17.15": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c languageName: node linkType: hard +"log-update@npm:^4.0.0": + version: 4.0.0 + resolution: "log-update@npm:4.0.0" + dependencies: + ansi-escapes: "npm:^4.3.0" + cli-cursor: "npm:^3.1.0" + slice-ansi: "npm:^4.0.0" + wrap-ansi: "npm:^6.2.0" + checksum: 18b299e230432a156f2535660776406d15ba8bb7817dd3eaadd58004b363756d4ecaabcd658f9949f90b62ea7d3354423be3fdeb7a201ab951ec0e8d6139af86 + languageName: node + linkType: hard + "loupe@npm:^2.3.6, loupe@npm:^2.3.7": version: 2.3.7 resolution: "loupe@npm:2.3.7" @@ -7551,6 +8652,13 @@ __metadata: languageName: node linkType: hard +"lru-cache@npm:^8.0.4": + version: 8.0.5 + resolution: "lru-cache@npm:8.0.5" + checksum: cd95a9c38497611c5a6453de39a881f6eb5865851a2a01b5f14104ff3fee515362a7b1e7de28606028f423802910ba05bdb8ae1aa7b0d54eae70c92f0cec10b2 + languageName: node + linkType: hard + "lru-cache@npm:^9.1.1 || ^10.0.0": version: 10.0.1 resolution: "lru-cache@npm:10.0.1" @@ -7574,6 +8682,15 @@ __metadata: languageName: node linkType: hard +"make-dir@npm:^4.0.0": + version: 4.0.0 + resolution: "make-dir@npm:4.0.0" + dependencies: + semver: "npm:^7.5.3" + checksum: 69b98a6c0b8e5c4fe9acb61608a9fbcfca1756d910f51e5dbe7a9e5cfb74fca9b8a0c8a0ffdf1294a740826c1ab4871d5bf3f62f72a3049e5eac6541ddffed68 + languageName: node + linkType: hard + "make-fetch-happen@npm:^13.0.0": version: 13.0.0 resolution: "make-fetch-happen@npm:13.0.0" @@ -7693,7 +8810,7 @@ __metadata: languageName: node linkType: hard -"mime-types@npm:^2.1.12, mime-types@npm:^2.1.16, mime-types@npm:~2.1.19, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": +"mime-types@npm:^2.1.12, mime-types@npm:^2.1.16, mime-types@npm:^2.1.18, mime-types@npm:^2.1.27, mime-types@npm:~2.1.19, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": version: 2.1.35 resolution: "mime-types@npm:2.1.35" dependencies: @@ -7762,7 +8879,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:9.0.3, minimatch@npm:^9.0.1": +"minimatch@npm:9.0.3, minimatch@npm:^9.0.1, minimatch@npm:^9.0.3": version: 9.0.3 resolution: "minimatch@npm:9.0.3" dependencies: @@ -7919,7 +9036,7 @@ __metadata: languageName: node linkType: hard -"mkdirp@npm:^1.0.3": +"mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": version: 1.0.4 resolution: "mkdirp@npm:1.0.4" bin: @@ -7975,6 +9092,13 @@ __metadata: languageName: node linkType: hard +"muggle-string@npm:^0.3.1": + version: 0.3.1 + resolution: "muggle-string@npm:0.3.1" + checksum: 489b0575fa76e30914393915a36638590052409fca2206a6bef0fb0ad7b181c1cbf99761191bfd16fe402c6f5a3164897965422fa32ef20ada1b44024ba46ab6 + languageName: node + linkType: hard + "multibase@npm:^0.7.0": version: 0.7.0 resolution: "multibase@npm:0.7.0" @@ -8032,16 +9156,14 @@ __metadata: languageName: node linkType: hard -"nanoid@npm:^3.3.6": - version: 3.3.6 - resolution: "nanoid@npm:3.3.6" - bin: - nanoid: bin/nanoid.cjs - checksum: 606b355960d0fcbe3d27924c4c52ef7d47d3b57208808ece73279420d91469b01ec1dce10fae512b6d4a8c5a5432b352b228336a8b2202a6ea68e67fa348e2ee +"nanocolors@npm:^0.2.1": + version: 0.2.13 + resolution: "nanocolors@npm:0.2.13" + checksum: ee6943a3f0d0c4579856a3400f4f50606e59007adb25cf2fe183b8df7875a123af3f7c3003d723f2366b63bec5f97a90972972fb539a3776f0c4188b5119070f languageName: node linkType: hard -"nanoid@npm:^3.3.7": +"nanoid@npm:^3.1.25, nanoid@npm:^3.3.7": version: 3.3.7 resolution: "nanoid@npm:3.3.7" bin: @@ -8050,6 +9172,15 @@ __metadata: languageName: node linkType: hard +"nanoid@npm:^3.3.6": + version: 3.3.6 + resolution: "nanoid@npm:3.3.6" + bin: + nanoid: bin/nanoid.cjs + checksum: 606b355960d0fcbe3d27924c4c52ef7d47d3b57208808ece73279420d91469b01ec1dce10fae512b6d4a8c5a5432b352b228336a8b2202a6ea68e67fa348e2ee + languageName: node + linkType: hard + "natural-compare@npm:^1.4.0": version: 1.4.0 resolution: "natural-compare@npm:1.4.0" @@ -8183,6 +9314,13 @@ __metadata: languageName: node linkType: hard +"normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": + version: 3.0.0 + resolution: "normalize-path@npm:3.0.0" + checksum: e008c8142bcc335b5e38cf0d63cfd39d6cf2d97480af9abdbe9a439221fd4d749763bab492a8ee708ce7a194bb00c9da6d0a115018672310850489137b3da046 + languageName: node + linkType: hard + "normalize-url@npm:^6.0.1": version: 6.1.0 resolution: "normalize-url@npm:6.1.0" @@ -8308,7 +9446,7 @@ __metadata: languageName: node linkType: hard -"on-finished@npm:2.4.1": +"on-finished@npm:2.4.1, on-finished@npm:^2.3.0": version: 2.4.1 resolution: "on-finished@npm:2.4.1" dependencies: @@ -8326,7 +9464,7 @@ __metadata: languageName: node linkType: hard -"onetime@npm:^5.1.2": +"onetime@npm:^5.1.0, onetime@npm:^5.1.2": version: 5.1.2 resolution: "onetime@npm:5.1.2" dependencies: @@ -8344,7 +9482,14 @@ __metadata: languageName: node linkType: hard -"open@npm:^8.4.0": +"only@npm:~0.0.2": + version: 0.0.2 + resolution: "only@npm:0.0.2" + checksum: d26b1347835a5a9b17afbd889ed60de3d3ae14cdeca5ba008d86e6bf055466a431adc731b82e1e8ab24a3b8be5b5c2cdbc16e652d231d18cc1a5752320aaf0a0 + languageName: node + linkType: hard + +"open@npm:^8.0.2, open@npm:^8.4.0": version: 8.4.2 resolution: "open@npm:8.4.2" dependencies: @@ -8486,13 +9631,20 @@ __metadata: languageName: node linkType: hard -"parseurl@npm:~1.3.3": +"parseurl@npm:^1.3.2, parseurl@npm:~1.3.3": version: 1.3.3 resolution: "parseurl@npm:1.3.3" checksum: 90dd4760d6f6174adb9f20cf0965ae12e23879b5f5464f38e92fce8073354341e4b3b76fa3d878351efe7d01e617121955284cfd002ab087fba1a0726ec0b4f5 languageName: node linkType: hard +"path-browserify@npm:^1.0.1": + version: 1.0.1 + resolution: "path-browserify@npm:1.0.1" + checksum: 8b8c3fd5c66bd340272180590ae4ff139769e9ab79522e2eb82e3d571a89b8117c04147f65ad066dccfb42fcad902e5b7d794b3d35e0fd840491a8ddbedf8c66 + languageName: node + linkType: hard + "path-exists@npm:^4.0.0": version: 4.0.0 resolution: "path-exists@npm:4.0.0" @@ -8500,7 +9652,7 @@ __metadata: languageName: node linkType: hard -"path-is-absolute@npm:^1.0.0": +"path-is-absolute@npm:1.0.1, path-is-absolute@npm:^1.0.0": version: 1.0.1 resolution: "path-is-absolute@npm:1.0.1" checksum: 127da03c82172a2a50099cddbf02510c1791fc2cc5f7713ddb613a56838db1e8168b121a920079d052e0936c23005562059756d653b7c544c53185efe53be078 @@ -8521,7 +9673,7 @@ __metadata: languageName: node linkType: hard -"path-parse@npm:^1.0.7": +"path-parse@npm:^1.0.6, path-parse@npm:^1.0.7": version: 1.0.7 resolution: "path-parse@npm:1.0.7" checksum: 11ce261f9d294cc7a58d6a574b7f1b935842355ec66fba3c3fd79e0f036462eaf07d0aa95bb74ff432f9afef97ce1926c720988c6a7451d8a584930ae7de86e1 @@ -8593,7 +9745,7 @@ __metadata: languageName: node linkType: hard -"picomatch@npm:^2.2.2, picomatch@npm:^2.3.1": +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.2, picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" checksum: 26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be @@ -8809,6 +9961,15 @@ __metadata: languageName: node linkType: hard +"qs@npm:^6.5.2": + version: 6.11.2 + resolution: "qs@npm:6.11.2" + dependencies: + side-channel: "npm:^1.0.4" + checksum: 4f95d4ff18ed480befcafa3390022817ffd3087fc65f146cceb40fc5edb9fa96cb31f648cae2fa96ca23818f0798bd63ad4ca369a0e22702fcd41379b3ab6571 + languageName: node + linkType: hard + "qs@npm:~6.5.2": version: 6.5.3 resolution: "qs@npm:6.5.3" @@ -8883,7 +10044,7 @@ __metadata: languageName: node linkType: hard -"raw-body@npm:2.5.2": +"raw-body@npm:2.5.2, raw-body@npm:^2.3.3": version: 2.5.2 resolution: "raw-body@npm:2.5.2" dependencies: @@ -8952,6 +10113,15 @@ __metadata: languageName: node linkType: hard +"readdirp@npm:~3.6.0": + version: 3.6.0 + resolution: "readdirp@npm:3.6.0" + dependencies: + picomatch: "npm:^2.2.1" + checksum: 6fa848cf63d1b82ab4e985f4cf72bd55b7dcfd8e0a376905804e48c3634b7e749170940ba77b32804d5fe93b3cc521aa95a8d7e7d725f830da6d93f3669ce66b + languageName: node + linkType: hard + "regenerator-runtime@npm:^0.14.0": version: 0.14.0 resolution: "regenerator-runtime@npm:0.14.0" @@ -9040,7 +10210,17 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.14.2, resolve@npm:^1.22.0, resolve@npm:^1.22.4": +"resolve-path@npm:^1.4.0": + version: 1.4.0 + resolution: "resolve-path@npm:1.4.0" + dependencies: + http-errors: "npm:~1.6.2" + path-is-absolute: "npm:1.0.1" + checksum: 7405c01e02c7c71c62f89e42eac1b876e5a1bb9c3b85e07ce674646841dd177571bca5639ff6780528bec9ff58be7b44845e69eced1d8c5d519f4c1d72c30907 + languageName: node + linkType: hard + +"resolve@npm:^1.14.2, resolve@npm:^1.22.0, resolve@npm:^1.22.4, resolve@npm:~1.22.1": version: 1.22.8 resolution: "resolve@npm:1.22.8" dependencies: @@ -9053,7 +10233,17 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@npm%3A^1.14.2#optional!builtin, resolve@patch:resolve@npm%3A^1.22.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin": +"resolve@npm:~1.19.0": + version: 1.19.0 + resolution: "resolve@npm:1.19.0" + dependencies: + is-core-module: "npm:^2.1.0" + path-parse: "npm:^1.0.6" + checksum: 1c8afdfb88c9adab0a19b6f16756d47f5917f64047bf5a38c17aa543aae5ccca2a0631671b19ce8460a7a3e65ead98ee70e046d3056ec173d3377a27487848a8 + languageName: node + linkType: hard + +"resolve@patch:resolve@npm%3A^1.14.2#optional!builtin, resolve@patch:resolve@npm%3A^1.22.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.4#optional!builtin, resolve@patch:resolve@npm%3A~1.22.1#optional!builtin": version: 1.22.8 resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d" dependencies: @@ -9066,6 +10256,16 @@ __metadata: languageName: node linkType: hard +"resolve@patch:resolve@npm%3A~1.19.0#optional!builtin": + version: 1.19.0 + resolution: "resolve@patch:resolve@npm%3A1.19.0#optional!builtin::version=1.19.0&hash=c3c19d" + dependencies: + is-core-module: "npm:^2.1.0" + path-parse: "npm:^1.0.6" + checksum: 254980f60dd9fdb28b34a511e70df6e3027d9627efce86a40757eea9b87252d172829c84517554560c4541ebfe207868270c19a0f086997b41209367aa8ef74f + languageName: node + linkType: hard + "responselike@npm:^2.0.0": version: 2.0.1 resolution: "responselike@npm:2.0.1" @@ -9075,6 +10275,16 @@ __metadata: languageName: node linkType: hard +"restore-cursor@npm:^3.1.0": + version: 3.1.0 + resolution: "restore-cursor@npm:3.1.0" + dependencies: + onetime: "npm:^5.1.0" + signal-exit: "npm:^3.0.2" + checksum: 8051a371d6aa67ff21625fa94e2357bd81ffdc96267f3fb0fc4aaf4534028343836548ef34c240ffa8c25b280ca35eb36be00b3cb2133fa4f51896d7e73c6b4f + languageName: node + linkType: hard + "retry@npm:^0.12.0": version: 0.12.0 resolution: "retry@npm:0.12.0" @@ -9371,7 +10581,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.3.5, semver@npm:^7.5.4": +"semver@npm:^7.3.5, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:~7.5.4": version: 7.5.4 resolution: "semver@npm:7.5.4" dependencies: @@ -9474,6 +10684,13 @@ __metadata: languageName: node linkType: hard +"setprototypeof@npm:1.1.0": + version: 1.1.0 + resolution: "setprototypeof@npm:1.1.0" + checksum: a77b20876689c6a89c3b42f0c3596a9cae02f90fc902570cbd97198e9e8240382086c9303ad043e88cee10f61eae19f1004e51d885395a1e9bf49f9ebed12872 + languageName: node + linkType: hard + "setprototypeof@npm:1.2.0": version: 1.2.0 resolution: "setprototypeof@npm:1.2.0" @@ -9527,7 +10744,7 @@ __metadata: languageName: node linkType: hard -"signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": +"signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" checksum: 25d272fa73e146048565e08f3309d5b942c1979a6f4a58a8c59d5fa299728e9c2fcd1a759ec870863b1fd38653670240cd420dad2ad9330c71f36608a6a1c912 @@ -9566,6 +10783,17 @@ __metadata: languageName: node linkType: hard +"slice-ansi@npm:^4.0.0": + version: 4.0.0 + resolution: "slice-ansi@npm:4.0.0" + dependencies: + ansi-styles: "npm:^4.0.0" + astral-regex: "npm:^2.0.0" + is-fullwidth-code-point: "npm:^3.0.0" + checksum: 6c25678db1270d4793e0327620f1e0f9f5bea4630123f51e9e399191bc52c87d6e6de53ed33538609e5eacbd1fab769fae00f3705d08d029f02102a540648918 + languageName: node + linkType: hard + "smart-buffer@npm:^4.2.0": version: 4.2.0 resolution: "smart-buffer@npm:4.2.0" @@ -9629,13 +10857,27 @@ __metadata: languageName: node linkType: hard -"source-map@npm:^0.7.4": +"source-map@npm:^0.7.3, source-map@npm:^0.7.4": version: 0.7.4 resolution: "source-map@npm:0.7.4" checksum: dc0cf3768fe23c345ea8760487f8c97ef6fca8a73c83cd7c9bf2fde8bc2c34adb9c0824d6feb14bc4f9e37fb522e18af621543f1289038a66ac7586da29aa7dc languageName: node linkType: hard +"source-map@npm:~0.6.1": + version: 0.6.1 + resolution: "source-map@npm:0.6.1" + checksum: ab55398007c5e5532957cb0beee2368529618ac0ab372d789806f5718123cc4367d57de3904b4e6a4170eb5a0b0f41373066d02ca0735a0c4d75c7d328d3e011 + languageName: node + linkType: hard + +"sprintf-js@npm:~1.0.2": + version: 1.0.3 + resolution: "sprintf-js@npm:1.0.3" + checksum: ecadcfe4c771890140da5023d43e190b7566d9cf8b2d238600f31bec0fc653f328da4450eb04bd59a431771a8e9cc0e118f0aa3974b683a4981b4e07abc2a5bb + languageName: node + linkType: hard + "sshpk@npm:^1.7.0": version: 1.18.0 resolution: "sshpk@npm:1.18.0" @@ -9680,6 +10922,13 @@ __metadata: languageName: node linkType: hard +"statuses@npm:>= 1.4.0 < 2, statuses@npm:>= 1.5.0 < 2, statuses@npm:^1.5.0": + version: 1.5.0 + resolution: "statuses@npm:1.5.0" + checksum: e433900956357b3efd79b1c547da4d291799ac836960c016d10a98f6a810b1b5c0dcc13b5a7aa609a58239b5190e1ea176ad9221c2157d2fd1c747393e6b2940 + languageName: node + linkType: hard + "std-env@npm:^3.5.0": version: 3.7.0 resolution: "std-env@npm:3.7.0" @@ -9701,6 +10950,13 @@ __metadata: languageName: node linkType: hard +"string-argv@npm:~0.3.1": + version: 0.3.2 + resolution: "string-argv@npm:0.3.2" + checksum: 75c02a83759ad1722e040b86823909d9a2fc75d15dd71ec4b537c3560746e33b5f5a07f7332d1e3f88319909f82190843aa2f0a0d8c8d591ec08e93d5b8dec82 + languageName: node + linkType: hard + "string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": version: 4.2.3 resolution: "string-width@npm:4.2.3" @@ -9829,7 +11085,7 @@ __metadata: languageName: node linkType: hard -"strip-json-comments@npm:^3.1.1": +"strip-json-comments@npm:^3.1.1, strip-json-comments@npm:~3.1.1": version: 3.1.1 resolution: "strip-json-comments@npm:3.1.1" checksum: 9681a6257b925a7fa0f285851c0e613cc934a50661fa7bb41ca9cbbff89686bb4a0ee366e6ecedc4daafd01e83eee0720111ab294366fe7c185e935475ebcecd @@ -10073,6 +11329,13 @@ __metadata: languageName: node linkType: hard +"tsscmp@npm:1.0.6": + version: 1.0.6 + resolution: "tsscmp@npm:1.0.6" + checksum: 2f79a9455e7e3e8071995f98cdf3487ccfc91b760bec21a9abb4d90519557eafaa37246e87c92fa8bf3fef8fd30cfd0cc3c4212bb929baa9fb62494bfa4d24b2 + languageName: node + linkType: hard + "tunnel-agent@npm:^0.6.0": version: 0.6.0 resolution: "tunnel-agent@npm:0.6.0" @@ -10126,7 +11389,14 @@ __metadata: languageName: node linkType: hard -"type-is@npm:~1.6.18": +"type-fest@npm:^0.21.3": + version: 0.21.3 + resolution: "type-fest@npm:0.21.3" + checksum: 902bd57bfa30d51d4779b641c2bc403cdf1371fb9c91d3c058b0133694fcfdb817aef07a47f40faf79039eecbaa39ee9d3c532deff244f3a19ce68cea71a61e8 + languageName: node + linkType: hard + +"type-is@npm:^1.6.16, type-is@npm:~1.6.18": version: 1.6.18 resolution: "type-is@npm:1.6.18" dependencies: @@ -10216,6 +11486,16 @@ __metadata: languageName: node linkType: hard +"typescript@npm:5.3.3": + version: 5.3.3 + resolution: "typescript@npm:5.3.3" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: e33cef99d82573624fc0f854a2980322714986bc35b9cb4d1ce736ed182aeab78e2cb32b385efa493b2a976ef52c53e20d6c6918312353a91850e2b76f1ea44f + languageName: node + linkType: hard + "typescript@patch:typescript@npm%3A5.2.2#optional!builtin, typescript@patch:typescript@npm%3A^5.2.2#optional!builtin, typescript@patch:typescript@npm%3A~5.2.0#optional!builtin": version: 5.2.2 resolution: "typescript@patch:typescript@npm%3A5.2.2#optional!builtin::version=5.2.2&hash=f3b441" @@ -10226,6 +11506,16 @@ __metadata: languageName: node linkType: hard +"typescript@patch:typescript@npm%3A5.3.3#optional!builtin": + version: 5.3.3 + resolution: "typescript@patch:typescript@npm%3A5.3.3#optional!builtin::version=5.3.3&hash=29ae49" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: e22df47df9b2b2f2617b8bf511a29aea3d177f9f7a0756818230a76b01cbd7da988bf55f9463aaa1a4c1ff90b80f8dc5676460d4e9dfc010572cbba59b822b0c + languageName: node + linkType: hard + "ufo@npm:^1.3.2": version: 1.3.2 resolution: "ufo@npm:1.3.2" @@ -10407,6 +11697,13 @@ __metadata: languageName: node linkType: hard +"validator@npm:^13.7.0": + version: 13.11.0 + resolution: "validator@npm:13.11.0" + checksum: 0107da3add5a4ebc6391dac103c55f6d8ed055bbcc29a4c9cbf89eacfc39ba102a5618c470bdc33c6487d30847771a892134a8c791f06ef0962dd4b7a60ae0f5 + languageName: node + linkType: hard + "varint@npm:^5.0.0": version: 5.0.2 resolution: "varint@npm:5.0.2" @@ -10414,7 +11711,7 @@ __metadata: languageName: node linkType: hard -"vary@npm:^1, vary@npm:~1.1.2": +"vary@npm:^1, vary@npm:^1.1.2, vary@npm:~1.1.2": version: 1.1.2 resolution: "vary@npm:1.1.2" checksum: f15d588d79f3675135ba783c91a4083dcd290a2a5be9fcb6514220a1634e23df116847b1cc51f66bfb0644cf9353b2abb7815ae499bab06e46dd33c1a6bf1f4f @@ -10457,6 +11754,26 @@ __metadata: languageName: node linkType: hard +"vite-plugin-dts@npm:^3.7.1": + version: 3.7.1 + resolution: "vite-plugin-dts@npm:3.7.1" + dependencies: + "@microsoft/api-extractor": "npm:7.39.0" + "@rollup/pluginutils": "npm:^5.1.0" + "@vue/language-core": "npm:^1.8.26" + debug: "npm:^4.3.4" + kolorist: "npm:^1.8.0" + vue-tsc: "npm:^1.8.26" + peerDependencies: + typescript: "*" + vite: "*" + peerDependenciesMeta: + vite: + optional: true + checksum: 48e82059f7f8f4c0fb59eb1331a90e4f2157be75d321fe69b069828509224a50acc45065a5e9886548c3f15765ac5e92a10dd0e731cdcf97764907cf60f6ea7e + languageName: node + linkType: hard + "vite@npm:4.4.11": version: 4.4.11 resolution: "vite@npm:4.4.11" @@ -10669,6 +11986,31 @@ __metadata: languageName: node linkType: hard +"vue-template-compiler@npm:^2.7.14": + version: 2.7.16 + resolution: "vue-template-compiler@npm:2.7.16" + dependencies: + de-indent: "npm:^1.0.2" + he: "npm:^1.2.0" + checksum: 66667ffd5095b707f169c902c4f1a011e9d5ab99fc228e4dac14eb5ca7f107ed99bff261b21578a4b391d2f3d320a8050e754404443472acad13ddaa4bd7bae2 + languageName: node + linkType: hard + +"vue-tsc@npm:^1.8.26": + version: 1.8.27 + resolution: "vue-tsc@npm:1.8.27" + dependencies: + "@volar/typescript": "npm:~1.11.1" + "@vue/language-core": "npm:1.8.27" + semver: "npm:^7.5.4" + peerDependencies: + typescript: "*" + bin: + vue-tsc: bin/vue-tsc.js + checksum: 6e6ba37eb7a0c8b9cc613225729c74edf8bd0632d265e62aca28b1969b5615b9dbe2de03aefb8aed2e26fdbd4b93f134785c8ab0095f92c2469192e2db5d09fd + languageName: node + linkType: hard + "w3c-xmlserializer@npm:^5.0.0": version: 5.0.0 resolution: "w3c-xmlserializer@npm:5.0.0" @@ -11143,6 +12485,17 @@ __metadata: languageName: node linkType: hard +"wrap-ansi@npm:^6.2.0": + version: 6.2.0 + resolution: "wrap-ansi@npm:6.2.0" + dependencies: + ansi-styles: "npm:^4.0.0" + string-width: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + checksum: baad244e6e33335ea24e86e51868fe6823626e3a3c88d9a6674642afff1d34d9a154c917e74af8d845fd25d170c4ea9cf69a47133c3f3656e1252b3d462d9f6c + languageName: node + linkType: hard + "wrap-ansi@npm:^8.1.0": version: 8.1.0 resolution: "wrap-ansi@npm:8.1.0" @@ -11196,6 +12549,21 @@ __metadata: languageName: node linkType: hard +"ws@npm:^7.4.2": + version: 7.5.9 + resolution: "ws@npm:7.5.9" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: aec4ef4eb65821a7dde7b44790f8699cfafb7978c9b080f6d7a98a7f8fc0ce674c027073a78574c94786ba7112cc90fa2cc94fc224ceba4d4b1030cff9662494 + languageName: node + linkType: hard + "ws@npm:^8.14.1, ws@npm:^8.8.1": version: 8.14.2 resolution: "ws@npm:8.14.2" @@ -11342,6 +12710,13 @@ __metadata: languageName: node linkType: hard +"ylru@npm:^1.2.0": + version: 1.3.2 + resolution: "ylru@npm:1.3.2" + checksum: 1fcdf0e6428fa4be71d8b1ae96ee6134d8c6194bd23e531b755b9d90bb9c555592415dc629501fe9036dfa410e2e71d0d093e5c91625df46d8e546a29e658ebe + languageName: node + linkType: hard + "yocto-queue@npm:^0.1.0": version: 0.1.0 resolution: "yocto-queue@npm:0.1.0" @@ -11355,3 +12730,20 @@ __metadata: checksum: 856117aa15cf5103d2a2fb173f0ab4acb12b4b4d0ed3ab249fdbbf612e55d1cadfd27a6110940e24746fb0a78cf640b522cc8bca76f30a3b00b66e90cf82abe0 languageName: node linkType: hard + +"z-schema@npm:~5.0.2": + version: 5.0.5 + resolution: "z-schema@npm:5.0.5" + dependencies: + commander: "npm:^9.4.1" + lodash.get: "npm:^4.4.2" + lodash.isequal: "npm:^4.5.0" + validator: "npm:^13.7.0" + dependenciesMeta: + commander: + optional: true + bin: + z-schema: bin/z-schema + checksum: e4c812cfe6468c19b2a21d07d4ff8fb70359062d33400b45f89017eaa3efe9d51e85963f2b115eaaa99a16b451782249bf9b1fa8b31d35cc473e7becb3e44264 + languageName: node + linkType: hard