From 5d22aac7839fb952b53e6a33a3b1aa8a0f2137f2 Mon Sep 17 00:00:00 2001 From: Adam Avramov Date: Thu, 19 Oct 2023 08:25:15 +0300 Subject: [PATCH] wip: test: separate fixture docs; more test fixes --- ensuite | 2 +- fadroma.test.ts | 162 +++++++++---------- fixtures/README.md | 19 +++ fixtures/{Fixtures.ts.md => fixtures.ts} | 58 ++----- pnpm-lock.yaml | 189 ++++++++++------------- 5 files changed, 196 insertions(+), 234 deletions(-) rename fixtures/{Fixtures.ts.md => fixtures.ts} (66%) diff --git a/ensuite b/ensuite index 1b1948756c4..42ab1cf50ff 160000 --- a/ensuite +++ b/ensuite @@ -1 +1 @@ -Subproject commit 1b1948756c4dc2576d799b79e74b78df2aeea465 +Subproject commit 42ab1cf50fff8dfaab2cbc3e83f1b47148acd0ec diff --git a/fadroma.test.ts b/fadroma.test.ts index 5c9c8a7e960..48647dcbfda 100644 --- a/fadroma.test.ts +++ b/fadroma.test.ts @@ -1,6 +1,12 @@ import * as assert from 'node:assert' -import { into, intoArray, intoRecord } from '@fadroma/agent' +import { + Template, Contract, Client, Deployment, Builder, Uploader, into, intoArray, intoRecord +} from '@fadroma/agent' +import Project from '@hackbg/fadroma' +import type { Agent } from '@fadroma/agent' + import { testEntrypoint, testSuite } from '@hackbg/ensuite' + export default testEntrypoint(import.meta.url, { 'agent': testSuite('./agent/agent.test'), @@ -46,7 +52,7 @@ export async function testCollections () { export async function testProject () { const { default: Project } = await import('@hackbg/fadroma') - const { tmpDir } = await import('./fixtures/Fixtures.ts.md') + const { tmpDir } = await import('./fixtures/fixtures') const root = tmpDir() @@ -77,66 +83,65 @@ export async function testProject () { } export async function testDeployment () { -assert.deepEqual( - Object.keys(deployment.snapshot.contracts), - ['kv1', 'kv2'] -) -// in your project's api.ts: - -import { Deployment } from '@fadroma/agent' - -// you would load snapshots as JSON, e.g.: -// const testnet = await (await fetch('./testnet_v4.json')).json() -export const mainnet = deployment.snapshot -export const testnet = deployment.snapshot - -// and create instances of your deployment with preloaded -// "address books" of contracts. for example here we restore -// a different snapshot depending on whether we're passed a -// mainnet or testnet connection. -class DeploymentC extends Deployment { - kv1 = this.contract({ crate: 'examples/kv', name: 'kv1', initMsg: {} }) - kv2 = this.contract({ crate: 'examples/kv', name: 'kv2', initMsg: {} }) - - static connect = (agent: Agent) => { - if (agent?.chain?.isMainnet) return new this({ ...mainnet, agent }) - if (agent?.chain?.isTestnet) return new this({ ...testnet, agent }) - return new this({ agent }) - } + assert.deepEqual( + Object.keys(deployment.snapshot.contracts), + ['kv1', 'kv2'] + ) + // you would load snapshots as JSON, e.g.: + // const testnet = await (await fetch('./testnet_v4.json')).json() + export const mainnet = deployment.snapshot + export const testnet = deployment.snapshot + + const mainnetAgent: any = { chain: { isMainnet: true } } // mock + const testnetAgent: any = { chain: { isTestnet: true } } // mock + const onMainnet = DeploymentC.connect(mainnetAgent) + const onTestnet = DeploymentC.connect(testnetAgent) + + assert(onMainnet.isMainnet) + assert(onTestnet.isTestnet) + assert.deepEqual(Object.keys(onMainnet.contracts), ['kv1', 'kv2']) + assert.deepEqual(Object.keys(onTestnet.contracts), ['kv1', 'kv2']) + + const kv1 = DeploymentC.connect(mainnetAgent).kv1.expect() + assert(kv1 instanceof Client) + + const kv2 = DeploymentC.connect(testnetAgent).kv2.expect() + assert(kv2 instanceof Client) + // simplest chain-side migration is to just call default deploy, + // which should reuse kv1 and kv2 and only deploy kv3. + deployment = await DeploymentD.upgrade(deployment).deploy() + + deployment = await getDeployment(Deployment4).deploy() + assert(deployment.t instanceof Template) + + assert([ + deployment.a, + ...Object.values(deployment.b) + ...Object.values(deployment.c) + ].every( + c=>(c instanceof Contract) && (c.expect() instanceof Client) + )) } -const mainnetAgent = { chain: { isMainnet: true } } // mock -const testnetAgent = { chain: { isTestnet: true } } // mock - -const onMainnet = DeploymentC.connect(mainnetAgent) - -const onTestnet = DeploymentC.connect(testnetAgent) -assert(onMainnet.isMainnet) -assert(onTestnet.isTestnet) -assert.deepEqual(Object.keys(onMainnet.contracts), ['kv1', 'kv2']) -assert.deepEqual(Object.keys(onTestnet.contracts), ['kv1', 'kv2']) -const kv1 = DeploymentC.connect(mainnetAgent).kv1.expect() -assert(kv1 instanceof Client) - -const kv2 = DeploymentC.connect(testnetAgent).kv2.expect() -assert(kv2 instanceof Client) -// in your project's api.ts: - -import { Deployment } from '@fadroma/agent' - -class DeploymentD extends DeploymentC { - kv3 = this.contract({ crate: 'examples/kv', name: 'kv3', initMsg: {} }) +export async function testBuild () { + const deployment = new Deployment4() + assert(deployment.t.builder instanceof Builder) + assert.equal(deployment.t.builder, deployment.builder) + await deployment.t.built + // -or- + await deployment.t.build() +} - // simplest client-side migration is to just instantiate - // a new deployment with the data from the old deployment. - static upgrade = (previous: DeploymentC) => - new this({ ...previous }) +export async function testUpload () { + const deployment = new Deployment4() + assert(deployment.t.uploader instanceof Uploader) + assert.equal(deployment.t.uploader, deployment.uploader) + await deployment.t.uploaded + // -or- + await deployment.t.upload() } -// simplest chain-side migration is to just call default deploy, -// which should reuse kv1 and kv2 and only deploy kv3. -deployment = await DeploymentD.upgrade(deployment).deploy() class Deployment4 extends Deployment { t = this.template({ crate: 'examples/kv' }) @@ -156,32 +161,27 @@ class Deployment4 extends Deployment { }) } -deployment = await getDeployment(Deployment4).deploy() -assert(deployment.t instanceof Template) - -assert([ - deployment.a, - ...Object.values(deployment.b) - ...Object.values(deployment.c) -].every( - c=>(c instanceof Contract) && (c.expect() instanceof Client) -)) -} -export async function testBuild () { -import { Builder } from '@fadroma/agent' -assert(deployment.t.builder instanceof Builder) -assert.equal(deployment.t.builder, deployment.builder) -await deployment.t.built -// -or- -await deployment.t.build() +// and create instances of your deployment with preloaded +// "address books" of contracts. for example here we restore +// a different snapshot depending on whether we're passed a +// mainnet or testnet connection. +class DeploymentC extends Deployment { + kv1 = this.contract({ crate: 'examples/kv', name: 'kv1', initMsg: {} }) + kv2 = this.contract({ crate: 'examples/kv', name: 'kv2', initMsg: {} }) + + static connect = (agent: Agent) => { + if (agent?.chain?.isMainnet) return new this({ ...mainnet, agent }) + if (agent?.chain?.isTestnet) return new this({ ...testnet, agent }) + return new this({ agent }) + } } -export async function testUpload () { -import { Uploader } from '@fadroma/agent' -assert(deployment.t.uploader instanceof Uploader) -assert.equal(deployment.t.uploader, deployment.uploader) -await deployment.t.uploaded -// -or- -await deployment.t.upload() +class DeploymentD extends DeploymentC { + kv3 = this.contract({ crate: 'examples/kv', name: 'kv3', initMsg: {} }) + + // simplest client-side migration is to just instantiate + // a new deployment with the data from the old deployment. + static upgrade = (previous: DeploymentC) => + new this({ ...previous }) } diff --git a/fixtures/README.md b/fixtures/README.md index e69de29bb2d..d4b1240ca40 100644 --- a/fixtures/README.md +++ b/fixtures/README.md @@ -0,0 +1,19 @@ +# Fixtures + +* Files with a fixed content that are used in the test suites. +* TODO use `fetch` instead of Node FS API + +## Example mnemonics + +## Example contracts + +* **Echo contract** (build with `pnpm rs:build:example examples/echo`). + Parrots back the data sent by the client, in order to validate + reading/writing and serializing/deserializing the input/output messages. +* **KV contract** (build with `pnpm rs:build:example examples/kv`). + Exposes the key/value storage API available to contracts, + in order to validate reading/writing and serializing/deserializing stored values. + +## Mocks + +### Mock agent diff --git a/fixtures/Fixtures.ts.md b/fixtures/fixtures.ts similarity index 66% rename from fixtures/Fixtures.ts.md rename to fixtures/fixtures.ts index 2525cf79fe2..80c67581109 100644 --- a/fixtures/Fixtures.ts.md +++ b/fixtures/fixtures.ts @@ -1,47 +1,22 @@ -# Fixtures - -* Files with a fixed content that are used in the test suites. -* TODO use `fetch` instead of Node FS API - -```typescript +import { withTmpDir } from '@hackbg/file' import { resolve, dirname } from 'node:path' import { fileURLToPath } from 'node:url' import { readFileSync } from 'node:fs' - +import $, { BinaryFile } from '@hackbg/file' import { Console, bold } from '@fadroma/agent' -import $ from '@hackbg/file' -``` +import { StubAgent as Agent, StubChain as Chain, Uploader, Contract, Client } from '@fadroma/agent' -```typescript export const here = dirname(fileURLToPath(import.meta.url)) export const workspace = resolve(here) export const fixture = x => resolve(here, x) export const log = new Console('Fadroma Testing') export const nullWasm = readFileSync(fixture('null.wasm')) -``` -## Example mnemonics - -```typescript export const mnemonics = [ 'canoe argue shrimp bundle drip neglect odor ribbon method spice stick pilot produce actual recycle deposit year crawl praise royal enlist option scene spy', 'bounce orphan vicious end identify universe excess miss random bench coconut curious chuckle fitness clean space damp bicycle legend quick hood sphere blur thing' ] -``` - -## Example contracts - -* **Echo contract** (build with `pnpm rs:build:example examples/echo`). - Parrots back the data sent by the client, in order to validate - reading/writing and serializing/deserializing the input/output messages. -* **KV contract** (build with `pnpm rs:build:example examples/kv`). - Exposes the key/value storage API available to contracts, - in order to validate reading/writing and serializing/deserializing stored values. - -```typescript -import $, { BinaryFile } from '@hackbg/file' -import { readFileSync } from 'fs' export const examples = { } @@ -60,24 +35,19 @@ example('Empty', 'empty.wasm', 'e3b0c44298fc1c149afbf4c89 example('KV', 'fadroma-example-kv@HEAD.wasm', '16dea8b55237085f24af980bbd408f1d6893384996e90e0ce2c6fc3432692a0d') example('Echo', 'fadroma-example-echo@HEAD.wasm', 'a4983efece1306aa897651fff74cae18436fc3280fc430d11a4997519659b6fd') example('Legacy', 'fadroma-example-legacy@HEAD.wasm', 'a5d58b42e686d9f5f8443eb055a3ac45018de2d1722985c5f77bad344fc00c3b') -``` - -## Mocks -### Mock agent +class MockChain extends Chain { + uploads = new class MockUploader extends Uploader { + resolve = () => `/tmp/fadroma-test-upload-${Math.floor(Math.random()*1000000)}` + make = () => new class MockFile { + resolve = () => `/tmp/fadroma-test-upload-${Math.floor(Math.random()*1000000)}` + } + } +} -```typescript -import { Agent, Chain, Uploader, Contract, Client } from '@fadroma/agent' export const mockAgent = () => new class MockAgent extends Agent { - chain = new (class MockChain extends Chain { - uploads = new class MockUploader extends Uploader { - resolve = () => `/tmp/fadroma-test-upload-${Math.floor(Math.random()*1000000)}` - make = () => new class MockFile { - resolve = () => `/tmp/fadroma-test-upload-${Math.floor(Math.random()*1000000)}` - } - } - })('mock') + chain = new MockChain('mock') async upload () { return {} } @@ -99,13 +69,9 @@ export const mockAgent = () => new class MockAgent extends Agent { } } -``` -```typescript -import { withTmpDir } from '@hackbg/file' export const tmpDir = () => { let x withTmpDir(dir=>x=dir) return x } -``` diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 96929fce3e2..6e5a9a8024c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -134,7 +134,7 @@ importers: devDependencies: '@hackbg/ensuite': specifier: ^1.1 - version: link:../ensuite + version: 1.4.5 connect: dependencies: @@ -171,7 +171,7 @@ importers: devDependencies: '@hackbg/ensuite': specifier: 1.x - version: link:../../ensuite + version: 1.4.5 connect/cw/cosmjs-esm: dependencies: @@ -356,7 +356,7 @@ importers: devDependencies: '@hackbg/ensuite': specifier: 1.x - version: link:../../ensuite + version: 1.4.5 connect/scrt/secretjs-esm: dependencies: @@ -749,7 +749,7 @@ importers: devDependencies: '@hackbg/ensuite': specifier: ^1.4.5 - version: link:../.. + version: 1.4.5 ensuite/toolbox/cmds: dependencies: @@ -768,7 +768,7 @@ importers: devDependencies: '@hackbg/ensuite': specifier: ^1.4.4 - version: link:../.. + version: 1.4.5 ensuite/toolbox/conf: dependencies: @@ -799,7 +799,7 @@ importers: devDependencies: '@hackbg/ensuite': specifier: ^1.1.1 - version: link:../.. + version: 1.4.5 '@types/dockerode': specifier: ^3.3.14 version: 3.3.14 @@ -808,7 +808,7 @@ importers: devDependencies: '@hackbg/ensuite': specifier: ^1.4.5 - version: link:../.. + version: 1.4.5 ensuite/toolbox/dump: devDependencies: @@ -823,7 +823,7 @@ importers: devDependencies: '@hackbg/ensuite': specifier: ^1.4.5 - version: link:../.. + version: 1.4.5 ensuite/toolbox/file: dependencies: @@ -1826,6 +1826,55 @@ packages: resolution: {integrity: sha512-ripWH+O6Zl0+E0XBaexF0vQgkY6wT3F6hhABVof+VsstIlNbkWfWcgAA3SLAx6aORM6NEK4YlE6BXfT7tG8FmQ==} dev: false + /@hackbg/ensuite@1.4.5: + resolution: {integrity: sha512-tXiavtyrp22jex3MsWadPJO6vfpwXm0gsXfCr2xHECl/oX9+d7QSlhkX72ZIVHgwwyemkGp7x7hjUAwuNq5eGg==} + hasBin: true + dependencies: + '@hackbg/file': 1.1.0 + '@hackbg/ganesha': link:ensuite/ganesha + '@hackbg/logs': 2.0.1 + '@hackbg/spec': link:ensuite/toolbox/spec + '@types/js-yaml': 4.0.5 + '@types/markdown-it': 0.0.0 + c8: 7.12.0 + glob: 9.2.1 + highlight.js: 11.7.0 + js-yaml: 4.1.0 + markdown-it: 13.0.1 + markdown-it-anchor: 8.6.7(@types/markdown-it@0.0.0)(markdown-it@13.0.1) + markdown-it-highlightjs: 4.0.1 + markdown-it-table-of-contents: 0.6.0 + pug: 3.0.2 + typescript: 5.1.6 + why-is-node-still-running: 1.0.0 + ws: 8.13.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + + /@hackbg/file@1.1.0: + resolution: {integrity: sha512-qHqFi6/KZrIB8fz5n8+7GJB8iipJmf+UzVi8vUvzMQ9GcjyzVPWQrgUJW7ZBff5smdCfAHtkV4hs47EGNAxOyg==} + dependencies: + '@hackbg/4mat': link:ensuite/toolbox/4mat + '@hackbg/logs': link:ensuite/toolbox/logs + js-yaml: 4.1.0 + mkdirp: 1.0.4 + recursive-copy: 2.0.13 + rimraf: 3.0.2 + symlink-dir: 5.0.1 + tmp: 0.2.1 + toml: 3.0.0 + dev: true + + /@hackbg/logs@2.0.1: + resolution: {integrity: sha512-qKFFXi5cSNQBYr56bdRLrUDR/3bySD0LNZ40wtOcC/df/D9c9ZIwwipsJK8ZEGndenG7liWCcFuY3jlsvVfimA==} + dependencies: + '@hackbg/allo': link:ensuite/toolbox/allo + '@hackbg/hide': link:ensuite/toolbox/hide + chalk: 4.1.2 + dev: true + /@hackbg/protobufjs-esm@6.11.4-patch.1: resolution: {integrity: sha512-wim0TgIUd7lMkzAm+/pNejIYmQh4FXkAB+ohl1vtB+EOqEYbJWNlFNMTCxIHG8WsIcYRO7hcskmKhiv31GL+vg==} hasBin: true @@ -1895,7 +1944,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.8.6 + '@types/node': 18.17.12 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -1916,14 +1965,14 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.8.6 + '@types/node': 18.17.12 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.8.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.8.6)(ts-node@10.9.1) + jest-config: 29.7.0(@types/node@18.17.12)(ts-node@10.9.1) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -1951,7 +2000,7 @@ packages: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.8.6 + '@types/node': 18.17.12 jest-mock: 29.7.0 dev: true @@ -1978,7 +2027,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.8.6 + '@types/node': 18.17.12 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -2011,7 +2060,7 @@ packages: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.19 - '@types/node': 20.8.6 + '@types/node': 18.17.12 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -2099,7 +2148,7 @@ packages: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 20.8.6 + '@types/node': 18.17.12 '@types/yargs': 17.0.24 chalk: 4.1.2 dev: true @@ -2388,13 +2437,13 @@ packages: /@types/cors@2.8.13: resolution: {integrity: sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==} dependencies: - '@types/node': 20.8.6 + '@types/node': 18.17.12 dev: true /@types/docker-modem@3.0.3: resolution: {integrity: sha512-i1A2Etnav7uHizZ87vUf4EqwJehY3JOcTfBS0pGBlO+HQ0jg2lUMCaJRg9VQM8ldZkpYdIfsenxcTOCpwxPXEg==} dependencies: - '@types/node': 20.8.6 + '@types/node': 18.17.12 '@types/ssh2': 1.11.13 dev: true @@ -2441,13 +2490,13 @@ packages: resolution: {integrity: sha512-IO+MJPVhoqz+28h1qLAcBEH2+xHMK6MTyHJc7MTnnYb6wsoLR29POVGJ7LycmVXIqyy/4/2ShP5sUwTXuOwb/w==} dependencies: '@types/minimatch': 5.1.2 - '@types/node': 20.8.6 + '@types/node': 18.17.12 dev: true /@types/graceful-fs@4.1.6: resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} dependencies: - '@types/node': 20.8.6 + '@types/node': 18.17.12 dev: true /@types/istanbul-lib-coverage@2.0.4: @@ -2515,7 +2564,7 @@ packages: /@types/karma@6.3.4: resolution: {integrity: sha512-aefuFcs4e4NAOi1Ue4AP9fR2TQv45NFpdaLXdg+3FxDDndk/4T6LoHRTmKtRVqkwtQPh5Ntc3CxsoOgzldAAfg==} dependencies: - '@types/node': 20.8.6 + '@types/node': 18.17.12 log4js: 6.9.1 transitivePeerDependencies: - supports-color @@ -2536,7 +2585,6 @@ packages: /@types/markdown-it@0.0.0: resolution: {integrity: sha512-rLEOTm6Wi9M8GFnIK7VczXSEThIN/eVoevpTYVk+FD/DPX3N15Sj9b3vkjjDY63U0Zw1yawf13CI92CCHpC5kw==} - dev: false /@types/minimatch@5.1.2: resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} @@ -2588,7 +2636,7 @@ packages: /@types/prompts@2.4.2: resolution: {integrity: sha512-TwNx7qsjvRIUv/BCx583tqF5IINEVjCNqg9ofKHRlSoUHE62WBHrem4B1HGXcIrG511v29d1kJ9a/t2Esz7MIg==} dependencies: - '@types/node': 20.8.6 + '@types/node': 18.17.12 kleur: 3.0.3 dev: true @@ -3085,7 +3133,6 @@ packages: engines: {node: '>=12.10'} dependencies: rimraf: 3.0.2 - dev: false /accepts@1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} @@ -3279,7 +3326,6 @@ packages: /array-differ@1.0.0: resolution: {integrity: sha512-LeZY+DZDRnvP7eMuQ6LHfCzUGxAAIViUBliK24P3hWXL6y4SortgR6Nim6xrkfSLlmH0+k+9NYNwVC2s53ZrYQ==} engines: {node: '>=0.10.0'} - dev: false /array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} @@ -3301,7 +3347,6 @@ packages: engines: {node: '>=0.10.0'} dependencies: array-uniq: 1.0.3 - dev: false /array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} @@ -3311,7 +3356,6 @@ packages: /array-uniq@1.0.3: resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==} engines: {node: '>=0.10.0'} - dev: false /array.prototype.flat@1.3.1: resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==} @@ -3341,7 +3385,6 @@ packages: /asap@2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} - dev: false /asn1.js@5.4.1: resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==} @@ -3360,7 +3403,6 @@ packages: /assert-never@1.2.1: resolution: {integrity: sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==} - dev: false /assert@2.0.0: resolution: {integrity: sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==} @@ -3493,7 +3535,6 @@ packages: engines: {node: '>= 10.0.0'} dependencies: '@babel/types': 7.22.11 - dev: false /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -3525,7 +3566,6 @@ packages: engines: {node: '>=4'} dependencies: is-windows: 1.0.2 - dev: false /big-integer@1.6.51: resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==} @@ -3830,7 +3870,6 @@ packages: resolution: {integrity: sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==} dependencies: is-regex: 1.1.4 - dev: false /chokidar@3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} @@ -4057,7 +4096,6 @@ packages: dependencies: '@babel/parser': 7.22.11 '@babel/types': 7.22.11 - dev: false /constants-browserify@1.0.0: resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==} @@ -4324,7 +4362,6 @@ packages: pify: 2.3.0 pinkie-promise: 2.0.1 rimraf: 2.7.1 - dev: false /depd@2.0.0: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} @@ -4432,7 +4469,6 @@ packages: /doctypes@1.1.0: resolution: {integrity: sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==} - dev: false /dom-serialize@2.2.1: resolution: {integrity: sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==} @@ -4517,7 +4553,7 @@ packages: dependencies: '@types/cookie': 0.4.1 '@types/cors': 2.8.13 - '@types/node': 20.8.6 + '@types/node': 18.17.12 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.4.2 @@ -4554,7 +4590,6 @@ packages: /entities@3.0.1: resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==} engines: {node: '>=0.12'} - dev: false /envinfo@7.10.0: resolution: {integrity: sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==} @@ -4567,7 +4602,6 @@ packages: hasBin: true dependencies: prr: 1.0.1 - dev: false /error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} @@ -5684,7 +5718,6 @@ packages: graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.0 - dev: false /fs-extra@8.1.0: resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} @@ -5812,7 +5845,6 @@ packages: minimatch: 7.4.6 minipass: 4.2.8 path-scurry: 1.10.1 - dev: false /globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} @@ -5854,7 +5886,6 @@ packages: object-assign: 4.1.1 pify: 2.3.0 pinkie-promise: 2.0.1 - dev: false /google-protobuf@3.21.2: resolution: {integrity: sha512-3MSOYFO5U9mPGikIYCzK0SaThypfGgS6bHqrUGXG3DPHCrb+txNqeEcns1W0lkGfk0rCyNXm7xB9rMxnCiZOoA==} @@ -5937,7 +5968,6 @@ packages: /highlight.js@11.7.0: resolution: {integrity: sha512-1rRqesRFhMO/PRF+G86evnyJkCgaZFOI+Z6kdj15TA18funfoqJXvgPCLSf0SWq3SRfg1j3HlDs8o4s3EGq1oQ==} engines: {node: '>=12.0.0'} - dev: false /hmac-drbg@1.0.1: resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} @@ -6141,7 +6171,6 @@ packages: dependencies: acorn: 7.4.1 object-assign: 4.1.1 - dev: false /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} @@ -6204,21 +6233,18 @@ packages: /is-path-cwd@1.0.0: resolution: {integrity: sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==} engines: {node: '>=0.10.0'} - dev: false /is-path-in-cwd@1.0.1: resolution: {integrity: sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==} engines: {node: '>=0.10.0'} dependencies: is-path-inside: 1.0.1 - dev: false /is-path-inside@1.0.1: resolution: {integrity: sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==} engines: {node: '>=0.10.0'} dependencies: path-is-inside: 1.0.2 - dev: false /is-plain-object@2.0.4: resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} @@ -6229,7 +6255,6 @@ packages: /is-promise@2.2.2: resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} - dev: false /is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} @@ -6457,7 +6482,7 @@ packages: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.8.6 + '@types/node': 18.17.12 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.1 @@ -6547,7 +6572,7 @@ packages: - supports-color dev: true - /jest-config@29.7.0(@types/node@20.8.6)(ts-node@10.9.1): + /jest-config@29.7.0(@types/node@18.17.12)(ts-node@10.9.1): resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -6562,7 +6587,7 @@ packages: '@babel/core': 7.22.11 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.8.6 + '@types/node': 18.17.12 babel-jest: 29.7.0(@babel/core@7.22.11) chalk: 4.1.2 ci-info: 3.8.0 @@ -6633,7 +6658,7 @@ packages: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.8.6 + '@types/node': 18.17.12 jest-mock: 29.7.0 jest-util: 29.7.0 dev: true @@ -6654,7 +6679,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.6 - '@types/node': 20.8.6 + '@types/node': 18.17.12 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -6705,7 +6730,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.8.6 + '@types/node': 18.17.12 jest-util: 29.7.0 dev: true @@ -6760,7 +6785,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.8.6 + '@types/node': 18.17.12 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -6791,7 +6816,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.8.6 + '@types/node': 18.17.12 chalk: 4.1.2 cjs-module-lexer: 1.2.3 collect-v8-coverage: 1.0.2 @@ -6843,7 +6868,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.8.6 + '@types/node': 18.17.12 chalk: 4.1.2 ci-info: 3.8.0 graceful-fs: 4.2.11 @@ -6868,7 +6893,7 @@ packages: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.8.6 + '@types/node': 18.17.12 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -6880,7 +6905,7 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 20.8.6 + '@types/node': 18.17.12 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true @@ -6889,7 +6914,7 @@ packages: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 20.8.6 + '@types/node': 18.17.12 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -6923,7 +6948,6 @@ packages: /js-stringify@1.0.2: resolution: {integrity: sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==} - dev: false /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -6948,7 +6972,6 @@ packages: hasBin: true dependencies: argparse: 2.0.1 - dev: false /jsesc@2.5.2: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} @@ -7004,19 +7027,16 @@ packages: universalify: 2.0.0 optionalDependencies: graceful-fs: 4.2.11 - dev: false /jstransformer@1.0.0: resolution: {integrity: sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==} dependencies: is-promise: 2.2.2 promise: 7.3.1 - dev: false /junk@1.0.3: resolution: {integrity: sha512-3KF80UaaSSxo8jVnRYtMKNGFOoVPBdkkVPsw+Ad0y4oxKXPduS6G6iHkrf69yJVff/VAaYXkV42rtZ7daJxU3w==} engines: {node: '>=0.10.0'} - dev: false /just-extend@4.2.1: resolution: {integrity: sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==} @@ -7150,7 +7170,6 @@ packages: resolution: {integrity: sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==} dependencies: uc.micro: 1.0.6 - dev: false /lint-staged@13.1.2: resolution: {integrity: sha512-K9b4FPbWkpnupvK3WXZLbgu9pchUJ6N7TtVZjbaPsoizkqFUDkUReUL25xdrCljJs7uLUF3tZ7nVPeo/6lp+6w==} @@ -7301,7 +7320,6 @@ packages: /lru-cache@10.0.1: resolution: {integrity: sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==} engines: {node: 14 || >=16.14} - dev: false /lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -7357,18 +7375,15 @@ packages: dependencies: '@types/markdown-it': 0.0.0 markdown-it: 13.0.1 - dev: false /markdown-it-highlightjs@4.0.1: resolution: {integrity: sha512-EPXwFEN6P5nqR3G4KjT20r20xbGYKMMA/360hhSYFmeoGXTE6hsLtJAiB/8ID8slVH4CWHHEL7GX0YenyIstVQ==} dependencies: highlight.js: 11.7.0 - dev: false /markdown-it-table-of-contents@0.6.0: resolution: {integrity: sha512-jHvEjZVEibyW97zEYg19mZCIXO16lHbvRaPDkEuOfMPBmzlI7cYczMZLMfUvwkhdOVQpIxu3gx6mgaw46KsNsQ==} engines: {node: '>6.4.0'} - dev: false /markdown-it@13.0.1: resolution: {integrity: sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==} @@ -7379,7 +7394,6 @@ packages: linkify-it: 4.0.1 mdurl: 1.0.1 uc.micro: 1.0.6 - dev: false /marked@4.2.12: resolution: {integrity: sha512-yr8hSKa3Fv4D3jdZmtMMPghgVt6TWbk86WQaWhDloQjRSQhMMYCAro7jP7VDJrjjdV8pxVxMssXS8B8Y5DZ5aw==} @@ -7401,7 +7415,6 @@ packages: array-union: 1.0.2 arrify: 1.0.1 minimatch: 3.1.2 - dev: false /md5.js@1.3.5: resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} @@ -7413,7 +7426,6 @@ packages: /mdurl@1.0.1: resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} - dev: false /media-typer@0.3.0: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} @@ -7504,7 +7516,6 @@ packages: engines: {node: '>=10'} dependencies: brace-expansion: 2.0.1 - dev: false /minimatch@9.0.3: resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} @@ -7518,12 +7529,10 @@ packages: /minipass@4.2.8: resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==} engines: {node: '>=8'} - dev: false /minipass@7.0.3: resolution: {integrity: sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==} engines: {node: '>=16 || 14 >=14.17'} - dev: false /mkdirp-classic@0.5.3: resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} @@ -7539,7 +7548,6 @@ packages: resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} engines: {node: '>=10'} hasBin: true - dev: false /mkdirp@3.0.1: resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} @@ -8008,7 +8016,6 @@ packages: /path-is-inside@1.0.2: resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==} - dev: false /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} @@ -8028,7 +8035,6 @@ packages: dependencies: lru-cache: 10.0.1 minipass: 7.0.3 - dev: false /path-to-regexp@0.1.7: resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} @@ -8086,12 +8092,10 @@ packages: engines: {node: '>=0.10.0'} dependencies: pinkie: 2.0.4 - dev: false /pinkie@2.0.4: resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==} engines: {node: '>=0.10.0'} - dev: false /pirates@4.0.1: resolution: {integrity: sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==} @@ -8202,7 +8206,6 @@ packages: resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==} dependencies: asap: 2.0.6 - dev: false /prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} @@ -8240,7 +8243,6 @@ packages: /prr@1.0.1: resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} - dev: false /public-encrypt@4.0.3: resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} @@ -8259,7 +8261,6 @@ packages: constantinople: 4.0.1 js-stringify: 1.0.2 pug-runtime: 3.0.1 - dev: false /pug-code-gen@3.0.2: resolution: {integrity: sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg==} @@ -8272,11 +8273,9 @@ packages: pug-runtime: 3.0.1 void-elements: 3.1.0 with: 7.0.2 - dev: false /pug-error@2.0.0: resolution: {integrity: sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ==} - dev: false /pug-filters@4.0.0: resolution: {integrity: sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==} @@ -8286,7 +8285,6 @@ packages: pug-error: 2.0.0 pug-walk: 2.0.0 resolve: 1.22.4 - dev: false /pug-lexer@5.0.1: resolution: {integrity: sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==} @@ -8294,42 +8292,35 @@ packages: character-parser: 2.2.0 is-expression: 4.0.0 pug-error: 2.0.0 - dev: false /pug-linker@4.0.0: resolution: {integrity: sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==} dependencies: pug-error: 2.0.0 pug-walk: 2.0.0 - dev: false /pug-load@3.0.0: resolution: {integrity: sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==} dependencies: object-assign: 4.1.1 pug-walk: 2.0.0 - dev: false /pug-parser@6.0.0: resolution: {integrity: sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==} dependencies: pug-error: 2.0.0 token-stream: 1.0.0 - dev: false /pug-runtime@3.0.1: resolution: {integrity: sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==} - dev: false /pug-strip-comments@2.0.0: resolution: {integrity: sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==} dependencies: pug-error: 2.0.0 - dev: false /pug-walk@2.0.0: resolution: {integrity: sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==} - dev: false /pug@3.0.2: resolution: {integrity: sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw==} @@ -8342,7 +8333,6 @@ packages: pug-parser: 6.0.0 pug-runtime: 3.0.1 pug-strip-comments: 2.0.0 - dev: false /pump@3.0.0: resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} @@ -8492,7 +8482,6 @@ packages: pify: 2.3.0 promise: 7.3.1 slash: 1.0.0 - dev: false /regenerator-runtime@0.14.0: resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} @@ -8524,7 +8513,6 @@ packages: dependencies: '@zkochan/rimraf': 2.1.3 fs-extra: 10.1.0 - dev: false /require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} @@ -8601,7 +8589,6 @@ packages: hasBin: true dependencies: glob: 7.2.3 - dev: false /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} @@ -8864,7 +8851,6 @@ packages: /slash@1.0.0: resolution: {integrity: sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==} engines: {node: '>=0.10.0'} - dev: false /slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} @@ -9216,7 +9202,6 @@ packages: dependencies: better-path-resolve: 1.0.0 rename-overwrite: 4.0.3 - dev: false /table@5.4.6: resolution: {integrity: sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==} @@ -9359,11 +9344,9 @@ packages: /token-stream@1.0.0: resolution: {integrity: sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==} - dev: false /toml@3.0.0: resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} - dev: false /tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} @@ -9688,7 +9671,6 @@ packages: /uc.micro@1.0.6: resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==} - dev: false /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} @@ -9711,7 +9693,6 @@ packages: /universalify@2.0.0: resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} engines: {node: '>= 10.0.0'} - dev: false /unpipe@1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} @@ -9890,7 +9871,6 @@ packages: /void-elements@3.1.0: resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} engines: {node: '>=0.10.0'} - dev: false /vscode-oniguruma@1.7.0: resolution: {integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==} @@ -10170,7 +10150,6 @@ packages: /why-is-node-still-running@1.0.0: resolution: {integrity: sha512-oLjSBpYU0cY77XUJZzu0acNMaM/23dncjWsMcvSt45ZyyBEUuVXGDV2rH3XOg85xobxIIp1jcrq91r74XT1QDg==} - dev: false /wildcard@2.0.1: resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==} @@ -10208,7 +10187,6 @@ packages: '@babel/types': 7.22.11 assert-never: 1.2.1 babel-walk: 3.0.0-canary-5 - dev: false /wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} @@ -10299,7 +10277,6 @@ packages: optional: true utf-8-validate: optional: true - dev: false /xstream@11.14.0: resolution: {integrity: sha512-1bLb+kKKtKPbgTK6i/BaoAn03g47PpFstlbe1BA+y3pNS/LfvcaghS5BFf9+EE1J+KwSQsEpfJvFN5GqFtiNmw==}